#include<stdio.h>
#include <string.h>
//找规律知,YES的标准是左边的A的数量*中间的A的数量==右边的A的数量,同时要求PT中间要有A
int main(){
int a,i=0,len,j,l,m,r,p=0,t=0,key,np,nt;//l:left,m:middle,r:right,np:p出现的次数,nt同理,key用于实现单一出口,len是每个字符串的长度
scanf("%d",&a);
char b[a][100];
for(;i<a;i++){
scanf("%s",b[i]);//b[i]本身就是地址了,所以不需要在前面加&
}
for(i=0;i<a;i++){
key=1;
np=0;
nt=0;
len=strlen(b[i]);//是这样吗? 还是加* 呢?
for(j=0;j<len;j++){
if(b[i][j]!='A'&&b[i][j]!='P'&&b[i][j]!='T'){
key=0;
break;}
if(b[i][j]=='P'){
p=j+1;//记录第一个P的位置
np++;
}
if(b[i][j]=='T'){
t=j+1;//记录第一个T的位置
nt++;
}
}
if(key==1){
l=p-1;
m=t-p-1;
r=len-t;
if(l*m!=r||m==0||np!=1||nt!=1){
key=0;
}
}
if(key){
printf("YES");
}else{
printf("NO");
}
if(i+1!=a){
printf("\n");
}
}
return 0;
}
写起来很吃力,一方面题目不容易读懂,另一方面判断功能也不容易实现。(其实就是因为菜)
感觉代码不优美,不知道有没有更好的写法。
另外,题目输入样例APT以及对于的输出样例NO是后来加的,一些旧版本的解答可能没有考虑到这点。