九度1006:ZOJ问题

时间:2022-08-16 00:23:21

题目描述:
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。

是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
输入:
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
输出:
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
样例输入:
zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
样例输出:
Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer
这题找到规律就好,z前面o的个数a,z和j之间o的个数b,j之后o的个数c

只要满足a*b==c&&b!=0就好

但是有一些小细节,

1.z要在j的前面

2.z和j的个数必须为1

3.出现除了zoj三个以外的字符要处理


代码也不想修改了,将就看吧

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
	char s[1000+10];
	while(cin>>s){
		int a=0,b=0,c=0;
		int z=0,o=0,j=0,fz_z=0,q=0,fz_j=0;
		for(int i=0;i<strlen(s);i++){
			if(!(s[i]=='z'||s[i]=='o'||s[i]=='j'))
		      q=1;
			if(s[i]=='z')
			a=i,z++,fz_z=i;
			if(s[i]=='j'){
				b=i-fz_z-1;
				fz_j=i;
				j++;
				c=strlen(s)-i-1;
			}
		}
		if(q){
		cout<<"Wrong Answer"<<endl;
		continue;	
		}
		if(z>1||j>1||z==0||j==0){
			cout<<"Wrong Answer"<<endl;
		}
		else{
			if(a*b==c&&b!=0&&fz_j>fz_z)
			cout<<"Accepted"<<endl; 
			else
			cout<<"Wrong Answer"<<endl;
		}
	}
	return 0;
}