"答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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
1 #include<stdio.h> 2 #include<string.h> 3 int main(){ 4 /* 5 后前面A的数目/P前面A的数目等于P与A中间的A的数目。 6 办法有点笨 7 */ 8 int n; 9 scanf("%d",&n); 10 char c[100]; 11 int i; 12 int b;//数组长度 13 float a1=0;//P前面A的数目 14 float a2=0;//P后面,T中间,A的数目 15 float a3=0;//T后面A的数目 16 int k1=0;//P的数目 17 int k2=0;//T的数目 18 int p;//P的位置 19 int t;//T的位置 20 int y;//跳出第二层循环 21 while(n--) 22 { 23 y = 0; 24 k1 = 0; 25 k2 = 0; 26 a1 = 0; 27 a2 = 0; 28 a3 = 0; 29 scanf("%s",c); 30 b = strlen(c); 31 /* 32 判断是不是有多个P或T以及P与T的位置 33 */ 34 for(i=0;i<b;i++) 35 { 36 if(c[i]=='P') 37 { 38 p = i; 39 k1++; 40 } 41 if(c[i]=='T') 42 { 43 t = i; 44 k2++; 45 } 46 } 47 if(k1!=1||k2!=1) 48 { 49 printf("NO "); 50 continue; 51 } 52 /* 53 计算P之前A的数目,同时若不是A字符输出NO 54 */ 55 for(i=0;i<p;i++) 56 { 57 if(c[i]=='A') 58 { 59 a1++; 60 } 61 else 62 { 63 printf("NO "); 64 y=1; 65 break; 66 } 67 68 } 69 if(y) 70 { 71 continue; 72 } 73 /* 74 判断P与T之间的A的数目,若不是A字符输出NO 75 */ 76 for(i=p+1;i<t;i++) 77 { 78 if(c[i]=='A') 79 { 80 a2++; 81 } 82 else{ 83 printf("NO "); 84 y=1; 85 break; 86 } 87 } 88 if(y) 89 { 90 continue; 91 } 92 /* 93 计算T之后A的数目,不是字符A输出NO 94 */ 95 for(i=t+1;i<b;i++) 96 { 97 if(c[i]=='A') 98 { 99 a3++; 100 } 101 else{ 102 printf("NO "); 103 break; 104 } 105 } 106 /* 107 判断条件 108 */ 109 if(a1!=0) 110 { 111 if(a3/a1!=a2) 112 { 113 printf("NO "); 114 continue; 115 } 116 117 } 118 /* 119 若a1是0则a3也一定是0 120 */ 121 else 122 { 123 if(a3!=0) 124 { 125 printf("NO "); 126 continue; 127 } 128 } 129 if(a2==0) 130 { 131 printf("NO "); 132 continue; 133 } 134 /* 135 其他条件都成立 136 */ 137 printf("YES "); 138 } 139 }