SCAU2020春季个人排位赛div2 #3----E(HDU-3788)

问题描述
对给定的字符串(只包含’z’,‘o’,'j’三种字符),判断他是否能AC。
是否AC的规则如下:

  1. zoj能AC;
  2. 若字符串形式为xzojx,则也能AC,其中x可以是N个’o’ 或者为空;
  3. 若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;
}
发布了1 篇原创文章 · 获赞 2 · 访问量 42

猜你喜欢

转载自blog.csdn.net/MrEdit/article/details/104578353