HDU 3788 & 九度 1006

来源:互联网 发布:淘宝会员分几个等级 编辑:程序博客网 时间:2024/05/17 23:09

注:转载请注明转载网址http://blog.csdn.net/poweful/article/details/9733205,此文为本菜第一篇

ZOJ问题

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

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
zojozojoozoojoooozoojoooozoojozojooooozojozojoooo
Sample Output
AcceptedAcceptedAcceptedAcceptedAcceptedAcceptedWrong AnswerWrong Answer
Source
浙大计算机研究生复试上机考试-2010年

 解题思路:

这是一个简单的递归问题,开始老卡在若azbjc 能AC,则azbojac也能AC上,不理解。后来发现若azbjc 能AC,那么此时b='o' 并且 a中'o'和此时的c中'o'的个数是相同的,然后可以反复使用azbojac(就是用a代替a,用bo代替o,用ac代替c),然后你会发现z、j之间的'o'的个数*z之前的'o'的个数=j之后'o'的个数 && 满足该字符串中只有1个z,1个j才行,HDU的测试数据有问题,不能识别jzojz之类的情况。

代码:

#include<iostream>#include<string>using namespace std;int main(){string str;int posz,posj,i,cnt,sumz,sumj;while(cin>>str){for(i=0;i<str.length();i++)if(str[i]=='z')break;posz=i;for(i=str.length()-1;i>=0;i--)if(str[i]=='j')break;posj=i;if(posz>posj){cout<<"Wrong Answer"<<endl;continue;}sumz=sumj=0;for(i=0;i<str.length();i++){if(str[i]=='z')sumz++;else if(str[i]=='j')sumj++;}if(sumz!=1 || sumj!=1){cout<<"Wrong Answer"<<endl;continue;}cnt=posj-posz-1;if(cnt!=0 && cnt*posz==str.length()-posj-1)cout<<"Accepted"<<endl;elsecout<<"Wrong Answer"<<endl;}system("pause");    return 0;}


 

 
原创粉丝点击