九度OJ 题目1006:ZOJ问题

时间:2021-06-07 00:24:36

一.题目描述:
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。

 是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
输入:
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
输出:
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。

样例输入:

zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
样例输出:

Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer

二.题目分析

 经过题中条件的综合分析,我们可以得到AC的条件是Na*Nb=Nc,同时应该注意Nb>0这个条件,因为zj是WA的。

 深深被这道题所折磨,在九度上一直处于各种WA中,虽然代码在HDU上AC了,一直找呀找呀,好吧,原来是输入方法错了,将while(gets(str))换成while(scanf("%s",str)!=EOF)就可以了,简直哭晕,这是什么鬼,希望看到的各位高手可以解答一下区别,一直以为二者是相等的....

三.代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 1002
int main()
{
int i,start,end,mid;
char str[MAX];

freopen("1006.txt","r",stdin);

while(scanf("%s",str)!=EOF)
{
start=0;
mid=0;
end=0;

i=0;

while(str[i]=='o')
{
start++;
i++;
}

if(str[i]!='z')
{
printf("Wrong Answer\n");
continue;
}

i++;

while(str[i]=='o')
{
mid++;
i++;
}

if(str[i]!='j')
{
printf("Wrong Answer\n");
continue;
}

i++;
while(str[i]=='o')
{
end++;
i++;
}
if(str[i]!='\0')
{
printf("Wrong Answer\n");
continue;
}

if(end==start*mid&&mid>0)
printf("Accepted\n");
else
printf("Wrong Answer\n");
}
return 0;
}