ZOJ问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2984 Accepted Submission(s): 906
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
Source
浙大计算机研究生复试上机考试-2010年
HDU 3788
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个‘o‘ 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个‘o‘或者为空;
问题分析:
满足条件二:只需要在z和j之间出现一个o即可;
满足条件三:假设满足条件二:oozojoo,带入条件三a=oo,b=o,c=oo,按照条件三执行一次,则变为oozoojoooo,继续执行一次可以得到oozooojoooooo,可以看出按照条件三每递推一次,b中o的个数加1,c中增加的o的个数为a中o的个数,得到递推关系式:
a中o的个数=x中o的个数;
只要c中o的个数=b中o的个数*a中o的个数得到答案:Accepted;
/* Problem : 3788 ( ZOJ问题 ) Judge Status : Accepted RunId : 12763697 Language : C++ Author : GrantYuan Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta */ #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cstring> using namespace std; char s[1005]; int pz,pj,numa,numb,numc; int main() { // freopen("1in.txt","r",stdin); memset(s,0,sizeof(s)); while(~scanf("%s",s)){ int l=strlen(s); for(int i=0;i<l;i++) { if(s[i]=='z') pz=i+1; if(s[i]=='j') pj=i+1; } numa=pz-1;numb=pj-pz-1;numc=l-pj; if(numc==numa*numb&&pj-pz>1) printf("Accepted\n"); else printf("Wrong Answer\n"); memset(s,0,sizeof(s)); } return 0; }