#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
scanf("%d", &n);
string str;
int left, mid, right;
int flag;
for(int i=0; i<n; i++){
flag = 0;
cin >> str;
for(int j=0; j<str.length(); j++){
if(str[j]!='P' && str[j]!='A' && str[j]!='T'){
printf("NO\n");
flag = 1;
break;
}
}
if(flag){
continue;
}
left = str.find("P");
mid = str.find("T") - str.find("P") - 1;
right = str.length() - str.find("T") - 1;
if(mid == 1){
if(left == right){
printf("YES\n");
}else{
printf("NO\n");
}
}else if(mid == 0){
printf("NO\n");
}else{
while(mid != 1){
mid--;
right -= left;
}
if(left == right){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
return 0;
}
PATの話題が曖昧になっている気がします。考えすぎかもしれませんが、話題の意味がわかるまでに10分かかりました。
簡単なシミュレーションの質問です。最初に文字列を1回トラバースします。PATの3文字以外の文字がある場合は、NOを直接出力し、次の入力を開始します。
質問によると、PTの中央にAが1つしかない場合、Pの左側とTの右側のAの数は等しくなければならないことがわかります。中央にAがない場合PT、それは間違っています。
さらに厄介なのは3番目の条件です。PTの真ん中のAの数が1より大きい場合、PTの真ん中のAの数が1になるまで、この時点の質問の条件に従って前に戻ることができます。 1つ、それが正しいかどうかを判断します。