ZOJ问题
jiayongchong    2017-04-05 20:58:30

题目描述

对给定的字符串(只包含'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 <string>
using namespace std;
int main() {
    string str;
    long z,j;
    long len;
    long _z,j_,z_j;
    while( cin>>str ){
        
        z =  str.find("z");
        j = str.find("j");
        len = str.length();
        _z = z;          //z 前面 o 的个数
        z_j = j-z-1;      //z 与 j 之间 o 的个数
        j_ = len-1-j;    //j 后面 o 的个数
        
        if( (z_j == 1 || z_j == 2) && _z == 0 && j_ ==0 ){
            //当为(zoj)或(zooj)时,可以AC
            cout<<"Accepted"<<endl;
        }else if( (z_j == 1 || z_j == 2) && ( _z * j_ )!= 0 && (_z==j_||_z*2 ==j_) ){
            //当为(*zoj*)或者(*zoj**)或者 (*zooj*) 或者(*zooj**)时,可以AC,
            //其中一个星号'*'代表 N 个o,连个星号'**'代表 2xN 个 o.
            cout<<"Accepted"<<endl;
        }else{
            cout<<"Wrong Answer"<<endl;
        }
    }
    return 0;
}

 

立即体验
x