问题描述
对给定的字符串(只包含’z’,‘o’,'j’三种字符),判断他是否能AC。
是否AC的规则如下:
- zoj能AC;
- 若字符串形式为xzojx,则也能AC,其中x可以是N个’o’ 或者为空;
- 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个’o’或者为空;
Input 输入包含多组测试用例,每行有一个只包含’z’,‘o’,'j’三种字符的字符串,字符串长度小于等于1000;
Output 对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
样例输入
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
样例输出
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer
思路:由题意可知,这个字符串里,z(num1)和 j(num2) 只能有一个,且z的下标(tep1)必须在 j 的下标(tep2)前面,且z和 j 之间不能没有o才可AC。其次,观察题目所给的第2条和第3条规则:
在a z b j c中
当b=1时,若要AC,代入第2条,可得a=c
那么a z b o j a c也可AC,即a z o o j 2*a可AC
当b=2时,因为a z o o j 2*a可AC,那么a z o o o j 3*a也可AC
依次类推
再观察第1、2、3条规则可得只要满足a z b j a*b即可AC
PS:a,b,c为o的个数
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1005];
int main()
{
int i,tep1,tep2,len;
while(fgets(a,sizeof(a),stdin)>0)
{
int num1=0,num2=0,num3=0,num4=0,num5=0;
a[strlen(a)-1]='\0';
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]=='z')
{
tep1=i;
num1++;
}
if(a[i]=='j')
{
tep2=i;
num2++;
}
}
if((num1==1&&num2==1)&&(tep1<tep2))
{
num3=tep1;
num4=tep2-tep1-1;
num5=len-tep2-1;
if(num4!=0&&num5==num3*num4)cout<<"Accepted"<<endl;
else cout<<"Wrong Answer"<<endl;
}
else cout<<"Wrong Answer"<<endl;
}
return 0;
}