PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)
http://www.patest.cn/contests/pat-b-practise/1003
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。
输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。
输入样例:8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA输出样例:
YES YES YES YES NO NO NO NO
1 #include<stdio.h> 2 #include<string.h> 3 4 int judgePAT(char str[],const int len) 5 { 6 if(len<3) 7 return 0; 8 9 int iP=0,iT=0; 10 int lenP=0,lenT=0; 11 int len1=0,len2=0,len3=0; 12 13 for(int i=0;i<len;i++) 14 { 15 if( 'P'==str[i] && 0==lenP) 16 { 17 iP=i; 18 lenP++; 19 } 20 else if('A'==str[i]) 21 { 22 if(lenT) 23 len3++; 24 else if(lenP) 25 len2++; 26 else 27 len1++; 28 } 29 else if('T'==str[i] && 0==lenT && 1==lenP ) 30 { 31 iT=i; 32 lenT++; 33 } 34 else 35 return 0; 36 } 37 38 if( 1==lenP && 1==lenT && len2>0 ) 39 if(len1*len2==len3) 40 return 1; 41 42 return 0; //NO 43 } 44 int main() 45 { 46 int n=0; 47 char str[10][110]; 48 scanf("%d",&n); 49 getchar(); 50 51 for(int i=0;i<n;i++) 52 { 53 gets(str[i]); 54 if(judgePAT(str[i],strlen(str[i]))) 55 printf("YES"); 56 else 57 printf("NO"); 58 if(i<n-1) 59 printf("\n"); 60 } 61 return 0; 62 }