ZOJ问题
是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
zoj ozojo ozoojoo oozoojoooo zooj ozojo oooozojo zojoooo
Accepted Accepted Accepted Accepted Accepted Accepted Wrong Answer Wrong Answer
条件二和条件三要结合起来理解,最后会发现如下规律:
设:a = 第一个z前o的个数
b = 夹在z和j之间的o的个数
c = 第一个j之后的o的个数
则有条件二三有:
a,b,c满足a*b=c
而条件二的xzojx也刚好满足上述条件
另外要注意一点,那就是b>0,例如输入 zj,输出应该为WA而不是AC
#include<stdio.h> #include<string.h> char zoj[1100]; int main() { int len,now,ok; int a,b,c; int i,j,k; while(gets(zoj)!=NULL) { len=strlen(zoj); ok=0; now=0; a=b=c=0;//确定a,b,c的数量 for(i=0;i<len&&zoj[i]!='z';i++) { if(zoj[i]=='o')//保证都是o { a++; now++; } else { ok=1; break; } } now+=1; for(i=now;i<len&&zoj[i]!='j';i++) { if(zoj[i]=='o') { b++; now++; } else { ok=1; break; } } now+=1; for(i=now;i<len;i++) { if(zoj[i]=='o') { c++; } else { ok=1; break; } } if(ok==1) printf("Wrong Answern"); else { if(b!=0&&c==a*b) printf("Acceptedn"); /* 条件二和条件三要结合起来理解,最后会发现如下规律: 设:a = 第一个z前o的个数 b = 夹在z和j之间的o的个数 c = 第一个j之后的o的个数 则有条件二三有: a,b,c满足a*b=c 而且b!=0 */ else printf("Wrong Answern"); } } return 0; }