PAT 乙级1003

来源:互联网 发布:翁其钊 知乎 编辑:程序博客网 时间:2024/06/14 04:02

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。

输入样例:
8PATPAATAAPATAAAAPAATAAAAxPATxPTWhateverAPAAATAA
输出样例:
YESYESYESYESNONONONO 
#include <stdio.h>#include <string.h>//(P左边的A的个数)*(PT中间A的个数) = T右边的A的个数int JudgeIsPat( char s[] ){    int i,j,len,cntpre,cntin,cntpost,cntP,cntA,cntT;    int flag = 1;    len = strlen(s);    cntin = cntpost = cntpre = 0;    cntA = cntP = cntT = 0;    for( i=0; i<len; i++ )    {        if( s[i]!='A' && s[i]!='P' && s[i]!='T' )        {            flag = 0; break;        }        if( s[i]=='A' )            cntA++;        else if( s[i]=='P' )            cntP++;        else if( s[i]=='T' )            cntT++;    }    if( cntA==0 || cntP==0 || cntT==0 )        flag = 0;    if( flag ){        for( i=0; i<len; i++ )        {            if( s[i]=='A' )                cntpre++;            else if( s[i]=='P' )                break;            else            {                flag = 0; break;            }        }        if( flag )        {            for( i++; i<len; i++ )            {                if( s[i]=='A' )                    cntin++;                else if( s[i]=='T' )                    break;                else{                     flag = 0; break;                }            }            if( flag )            {                for( i++; i<len; i++ ){                    if( s[i]=='A' )                        cntpost++;                    else{                        flag = 0; break;                    }                }            }        }    }    if( (cntpost != cntin*cntpre) || (cntin == 0) )                    flag = 0;    return flag;}int main(){    int n,i;    int s[110];    scanf("%d",&n);    for( i=0; i<n; i++ )    {        scanf("%s",s);        if( JudgeIsPat(s) )            printf("YES\n");        else            printf("NO\n");    }    return 0;}


0 0
原创粉丝点击