这题就是一个坑,尼玛wa了一大片啊。
自己被hack了,比赛结束后改了又wa两次才过。
【题目大意】
其实就是一个猜题小技巧(联系自己初中考试的时候怎么猜题的,这题就好理解多了)。
这位同学是这样来选答案的:
1.如果有一些选项长度至少比其他所有的描述短两倍,或至少超过所有其他的描述的两倍,那么孩子认为这个选择很可能是正确的。
2.如果正好满足以上其中一种条件(重点),这个同学就会选择它,否则就选C.
给你一个选择题,让你选择出这个同学将会选择的答案。
【题目分析】
首先,这个题目就是一个模拟,模拟本身不难,想一下就有思路了,但是只怪很多人都没看清题目,只怪审题不仔细啊。
题目里面有句话是很关键的:If there is exactly one great choice then the child chooses
it.
也就是说,如果两个条件都满足的话,这位同学就不知道哪个的正确概率大,所以他又转过来选C。
#include<bits/stdc++.h>
using namespace std;
int main()
{
// freopen("cin.txt","r",stdin);
int i,j;
int len[5];
char str[4][200];
for(i=0;i<4;i++)
{
scanf("%s",str[i]);
len[i]=strlen(str[i])-2;
}
int Find1=0,mark1;
for(i=0;i<4;i++)
{
if(len[i]*6<=(len[(i+1)%4]+len[(i+2)%4]+len[(i+3)%4])) //找到了有可能符合条件的选项
{
Find1=1;
mark1=i;
// cout<<"if-1"<<endl;
for(j=0;j<4;j++) //继续判断
{
if(j!=i)
{
if(len[i]*2>len[j])
{
Find1=2; //不符合
break;
}
}
}
if(Find1==1) //判断一遍后任然成立,那就说明这个选项符合
break;
}
}
int Find2=0,mark2;
for(i=0;i<4;i++)
{
if(len[i]*6>=(len[(i+1)%4]+len[(i+2)%4]+len[(i+3)%4])) //找到了有可能符合条件的选项
{
Find2=1;
mark2=i;
// cout<<"if-2"<<endl;
for(j=0;j<4;j++) //继续判断
{
if(j!=i)
{
if(len[i]<len[j]*2)
{
Find2=2; //不符合
break;
}
}
}
if(Find2==1) //判断一遍后任然成立,那就说明这个选项符合
break;
}
}
// cout<<"mark="<<mark<<endl;
if(Find1==1&&Find2==1)
{
printf("C\n");
return 0;
}
if(Find1==1)
printf("%c\n",mark1+‘A‘);
else if(Find2==1)
printf("%c\n",mark2+‘A‘);
else
printf("C\n");
return 0;
}
codeforces --- Round #250 (Div. 2) A. The Child and
Homework,布布扣,bubuko.com
codeforces --- Round #250 (Div. 2) A. The Child and
Homework
时间: 2024-08-05 11:12:56