赞
踩
1003 我要通过! (20 分)
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
P
、 A
、 T
这三种字符,不可以包含其它字符;xPATx
的字符串都可以获得“答案正确”,其中 x
或者是空字符串,或者是仅由字母 A
组成的字符串;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
- #include <iostream>
- #include <cstring>
- using namespace std;
-
- int judgt(char *string)
- {
- int i=1;
- int length = strlen(string);
- if(string[0] == 'P'){ //this case is PAT
- while(i != (length-1)){ //if begin is
- if(string[i++] !='A') //then this string must
- return 0; // p(n A)T
- }
- if(i ==1 || string[i] != 'T')
- return 0;
- else
- return 1;
-
- }
- else if(string[0] == 'A'){ //this case is aP..A..Tcaaa
- int prefix =1;
- int infix=0;
- int suffix = 0;
- while(string[i] =='A'){ //process a,get prefix A
- prefix++;
- i++;
- }
- if(string[i++] !='P') //P
- return 0;
- while(string[i] =='A'){ //process b,get infix A
- infix++;
- i++;
- }
- if(infix == 0)
- return 0;
- if(string[i++] !='T')
- return 0;
- suffix = prefix * infix;
- int j=0;
- while(string[i] =='A'){
- j++;
- i++;
- }
- if(j !=suffix)
- return 0;
- else
- return 1;
- }
- else
- return 0;
- }
-
- int main(){
- int number;
- cin>>number;
- int i = 0;
- char** str = (char **)malloc(number*sizeof(char *));
-
- for(i=0;i<number;i++)
- *(str+i) = (char *)malloc(100*sizeof(char));
- i = 0;
- while(i !=number){
- scanf("%s",*(str+i));
- i++;
- }
- i=0;
- int result = 0;
- while(i !=number){
- result = judgt(*(str+i));
- if(result == 1)
- printf("YES\n");
- else
- printf("NO\n");
- i++;
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。