【PAT乙级真题及训练集】1003. 我要通过!(20)

答案正确是自动判题系统给出的最令人欢喜的回复。本题属于PAT答案正确大派送 —— 只要读入的字符串满足下列条件,系统就输出答案正确,否则输出答案错误

得到答案正确的条件是:

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2.
任意形如 xPATx 的字符串都可以获得答案正确,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3.
如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得答案正确的。

输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:每个字符串的检测结果占一行,如果该字符串可以获得答案正确,则输出YES,否则输出NO

输入样例:

8

PAT

PAAT

AAPATAA

AAPAATAAAA

xPATx

PT

Whatever

APAAATAA

输出样例:

YES

YES

YES

YES

NO

NO

NO

NO

 

 

 

这道题目对题意的理解也是个问题,在网上搜了下才明白过来,其实是把符合条件2的格式,变成aPbTc的形式,比如对于字符串"PAT"(a=null,b=A,c=null)它符合条件2的要求,那么就可以按照aPbATca的形式写,也就是"PAAT",再接下去是"PAAAT"。另如"APATA"(a=A,b=A,c=A),接下去是"APAATAA",再接下去是"APAAATAAA"。对于任何从这样扩展二来的字符串,b的初始值一定是A,而c的初始值与a相同,对于"aPbTc"的下一个其实是"aPAATaa",再下一个是"aPAAATaaa",再下一个是"aPAAAATaaaa",规律就出来了。在P前面A的个数*P与T之间A的个数等于T后面A的个数,若符合即答案正确,反之错误。

 以上转自于网友博客

 

#include

 

usingnamespacestd;

 

intmain()

{

 

    shortintlineNum;

    charline[100];//不赋值了可以用哪个内存赋值

 

    inti;

 

    intcouA1,couA2,couA3;

 

    cin>>lineNum;

 

    while(lineNum--!=0){

 

       //cout<

       for(i=0;i<100;++i)

           line[i]='\0';

 

       cin>>line;

       i=0;

       couA1=0;

       couA2=0;

       couA3=0;

 

       while(line[i]=='A'){

           ++i;

           ++couA1;

       }

       if(line[i]!='P'){

           cout<<"NO"<

           continue;

        }

 

       ++i;

       while(line[i]=='A'){

           ++i;

           ++couA2;

       }

 

 

       if(line[i]!='T'||couA2==0){

           cout<<"NO"<

           continue;

       }

       ++i;

 

       while(line[i]=='A'){

           ++i;

           ++couA3;

       }

 

       if(line[i]!='\0'){

           cout<<"NO"<

           continue;

       }

 

       if(couA1*couA2==couA3)

           cout<<"YES"<

       else

           cout<<"NO"<

 

    }

 

 

    //cout<<"end";

    //cin>>couA1;

    return0;

}

 

 

 

这道题 我的思路是一点一点的数,我看到别人的思路可以利用string一些函数先数一次为了检验是否是PAT这三个字符,再利用查找,求解。而我就是直接利用第一次数,直接检测。感觉还是别人的思路能够更开拓一些。

你可能感兴趣的:(【PAT乙级真题及训练集】1003. 我要通过!(20))