分析:
// aPbTc:
// a='',b='A',c='' -> PAT
// a='',b='AA',c='' -> PAAT
// a='AA',b='A',c='AA' -> AAPATAA -> aPbATca:AAPA(A)TAA(AA) -> aPbATca:AAPAA(A)TAAAA(AA)
// a='A',b='AA',c='AAA' -> APAATAAA -> aPbATca:APAA(A)TAAA(A) -> aPbATca:APAAA(A)TAAAA(A)
// a='AAAA',b='A',c='A' -> AAAAPATA -> aPbATca:AAAAPA(A)TA(AAAA) -> aPbATca:AAPAA(A)TAAAAA(AAAA)
得出结论:
- 只有三类字母
- 至少有一个‘A’(从结果反推)
- ‘P’之前的A字母个数 * ‘P’与‘T’之间的‘A’ = ‘T’之后的‘A’的个数
代码:
#include <stdio.h>
#include <string.h>
int main(){
char a[101];
int n,tag,p_num,t_num,a_num,p,t;
scanf("%d",&n);
getchar();
while(n--){
gets(a);
tag=1;
p=t=0;
p_num=t_num=a_num=0;
for(int i=0;i<strlen(a);i++){
if(a[i]=='P'){
p_num++;
p=i;
}
else if(a[i]=='T'){
t_num++;
t=i;
}
else if(a[i]=='A'){
a_num++;
}
else
tag=0;
}
int front=p,middle=t-p-1,rear=strlen(a)-t-1;
if(tag&&rear==front*middle&&a_num)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}