ZOJ问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3286 Accepted Submission(s): 982
Problem Description
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。
是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
Input
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000;
Output
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
Sample Input
zoj ozojo ozoojoo oozoojoooo zooj ozojo oooozojo zojoooo
Sample Output
Accepted Accepted Accepted Accepted Accepted Accepted Wrong Answer Wrong Answer
继续赛后清题,这题以前做过,还是跪了!!!
题解: 可根据前面两条规则,推断出一个规律:
1.形成zoooj,两端有o或者没有o的情况;
2.形成oozoojoooo,z前面o的个数于z,j之间o的个数的积等于j后面o的个数。
具体代码如下:
#include<cstdio>
#include<cstring>
char str[1010];
int main()
{
int len,z,j,a,b,c,x,y,i;
while(scanf("%s",str)!=EOF)
{
a=b=c=0;
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]=='z')
{
a++;
z=i;//标记z出现的位置
}
else if(str[i]=='j')
{
b++;
j=i;//标记j出现的位置
}
else
c++;
}
if(a==1&&b==1&&c!=0)//每个字符串里只有一个z和j
{
x=z;//统计z前面的o的个数
y=len-1-j;//统计j后面的o的个数
if(x==0&&y==0&&c!=0)
printf("Accepted\n");
else if(c-x-y!=0&&(x*(c-x-y)==y))
printf("Accepted\n");
else
printf("Wrong Answer\n");
}
else
printf("Wrong Answer\n");
}
return 0;
}