ZOJ问题(坑死了)

时间:2023-03-08 17:39:52

ZOJ问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3221    Accepted Submission(s): 963

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'或者为空;

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:x*b=z;2:z,j出现一次,o必须出现,3:z在j前边;坑了10多次、、、、、、
代码:
 #include<stdio.h>
#include<string.h>
char m[];
int judge(){
int t=strlen(m);
int x=,y=,a=,b=,c=,z=;
for(int i=;i<t;++i){
if(m[i]=='z')a++;
if(m[i]=='o')b++;
if(m[i]=='j')c++;
//if(m[i]!='z'&&m[i]!='o'&&m[i]!='j')return 0;
}
if(a!=||b==||c!=)return ;
a=b=c=;
for(int i=;i<t;++i){
if(m[i]=='z')a++;
if(!a&&m[i]=='o')x++;
if(a&&m[i]=='o'&&!c)b++;
if(a&&b&&m[i]=='j')c++;
if(c&&m[i]=='o')z++;
}//printf("%d %d %d %d %d\n",a,b,c,x,z);
if(a!=||!b||c!=)return ;
//if(x==z&&b)return 1;
if(z==b*x)return ;
else return ;
}
int main()
{
while(memset(m,,sizeof(m)),~scanf("%s",m)){
if(judge())puts("Accepted");
else puts("Wrong Answer");
}
return ;
}