1003 我要通過! (20 分)
阿新 • • 發佈:2018-12-10
“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 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 <stdio.h>
#include <string.h>
#define MAXNUM 100
int allPAT(char test[])
{
int i;
int res = 1;
for(i=0; test[i] != '\0'; i++){
if(test[i] != 'P'&& test[i] != 'A'&& test[i] != 'T')
res = 0;
}
return res;
}
int main()
{
int n;
char test[MAXNUM];
char *ans[] = {"NO" , "YES"};
char *a;
if(scanf("%d", &n))
getchar();
while(n--){
a = ans[0];
int i;
int lena;/*a中A的個數*/
int lenb;/*b中A的個數*/
int lenc;/*c中A的個數*/
for(i=0; (test[i] = getchar()) != '\n'; i++)/*取一條字串*/
;
test[i] = '\0';
if(allPAT(test)){
lena = 0;
lenb = 0;
lenc = 0;
while(test[lena] == 'A')
lena++;
if(test[lena] == 'P'){
while(test[lena+1 + lenb] == 'A')
lenb++;
if(test[lena+1 + lenb] == 'T'){
while(test[lena+1 + lenb+1 + lenc] == 'A')
lenc++;
if(test[lena+1 + lenb+1 + lenc] == '\0' && (lena*(lenb+1)) == (lenc+lena) && lenb>0)
a = ans[1];
}
}
}
printf("%s\n", a);
}
return 0;
}