题目1006:ZOJ问题
- 题目描写叙述:
-
对给定的字符串(仅仅包括'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
#include <iostream> #include <cstring> #include <stdio.h> using namespace std; bool accept1(char str[]) { int i = 0; bool isZ = false; bool isO = false; bool isJ = false; while(str[i]) { if(i == 0 && str[i] == 'z') isZ = true; if(i == 1 && str[i] == 'o') isO = true; if(i == 2 && str[i] == 'j') isJ = true; i++; } if(isZ && isO && isJ && i == 3) return true; else return false; } //xzojx bool accept2(char str[]) { int i = 2; bool flag = false; if(str[0] && str[1]) { while(str[i]) { if(str[i] == 'j' && str[i - 1] == 'o' && str[i - 2] == 'z') { int cishu = i -2 ; bool is_equal = true; int j =0; for(; j < cishu; j++) { if(str[j] == 'o' && str[i+1+j] == 'o') continue; else { is_equal = false; break; } } if(is_equal && !str[j+i+1]) { flag = true; break; } } i++; } } return flag; } // azbojac oozoojoooo bool accept3(char str[]) { int i = 0; int a=0,b=0,c=0; int numZ =0,numJ=0; bool hasZ = false,hasO = false,hasJ = false; bool flag = false; while(str[i]) { if(str[i] == 'z' ) { numZ++; hasZ = true; } if(str[i] == 'j') { numJ++; hasJ = true; } if(!hasZ && str[i] == 'o') a++; if(hasZ && !hasJ && str[i] == 'o') b++; if(hasZ && hasJ && str[i] == 'o') c++; i++; } if(numJ == 1 && numZ == 1) { if(2*a == c && b >= 1) flag = true; } return flag; } int main() { char str[1000]; //string str; while(scanf("%s",str) != EOF) { if(accept1(str) || accept2(str) || accept3(str)) { printf("%s\n","Accepted"); } else { printf("%s\n","Wrong Answer"); } } }