题解 | ZOJ问题
#include <iostream> using namespace std; int main() { string s; while (cin >> s) { // 注意 while 处理多个 case string tmp; int flg = 1; int cnt1=0; int cnt2=0; int cnt3=0; for (int i = 0; i < s.length(); i++) { if(s[i]=='o'){ if(flg==1) cnt1++; else if(flg==2) cnt2++; else cnt3++; } if(s[i]=='z') flg=2; else if(s[i]=='j') flg=3; } //cout<<cnt1<<" "<<cnt2<<" "<<cnt3<<endl; if(cnt1==0 and cnt3==0) cout<<"Accepted\n"; else if(cnt1!=0 and cnt3!=0 and cnt1*cnt2==cnt3) cout<<"Accepted\n"; else cout<<"Wrong Answer\n"; } } // 64 位输出请用 printf("%lld")
题目描述有点绕..但是看懂了以后还是蛮有意思的
如果有朋友看不懂题目,我来阐述下自己的描述或许能帮到你
条件1 “zoj“符合题意
条件2 “ozojo”“oozojoo”“ooozojooo”满足题意
条件3 若 [azbjc] 能通过,那么显然 [azbjc] 必然是满足条件1或者条件2的,那么azbojac能通过
转移方程 a'=a b'=b+1 c'=a+c
用n1,n2,n3分别记录z前面o的数量,z和j中间o的数量,j后面o的数量
条件1 说的是[0,1,0]满足题意
条件2 说的是[N,1,N]满足题意
条件3 说的是[0,1,0]可以推出[0,2,0]满足题意,从而[0,3,0]满足题意....
[N,1,N]可以推出[N,2,2N]满足题意,从而[N,3,3N]满足题意
综上,遍历后判定(cnt1==0 and cnt3==0)和(cnt1*cnt2==cnt3)即可