分析
1.只能包含P、A、T
2.xPATx — x或空或A的字符串
所以以下情况是合理的:PAT AAPATAA AAAPATAAA
3.如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
以此类推…
PAT正确 — PAAT正确 — PAAAT正确…
AAPATAA正确 — AAPAATAAAA正确 – AAPAAATAAAAAA正确…
AAAPATAAA正确 — AAAPAATAAAAAA正确 — AAAPAAATAAAAAAAAA正确…
此题我试过很多种限制,最后冲浪解锁出的结论是…
(left)P(mid)T(right) (left、mid、right为左边、中间、右边A的个数),必须满足:
1.中间必须有A —— mid >= 1
2.右边A的个数 = 左边A的个数*中间A的个数 —— right = left * mid(想不到这竟是道找规律的题目smile:))
3.因为b,c,x要么为空,要么为A的字符串,所以left、right != 1——简化为left != 1
#include<iostream>
#include<string>
using namespace std;
int main(){
int n,i,j,len;
string str;
int left, mid, right; //左边、中间、右边的A的个数
cin >> n;
while(n--){
int flag = 0;
cin >> str;
len = str.size();
for(i=0;i<len;i++){
if(str[i]!='P'&&str[i]!='A'&&str[i]!='T'){
flag = 1;
}
if(str[i] == 'P')
{
left = i;
}
if(str[i] == 'T'){
mid = i-left-1;
}
}
right = len - left - mid -2;
//cout << left << mid << right << endl;
if( mid >= 1 && right == left*mid && left !=1 ){
flag = 0;
}else{
flag = 1;
}
if(flag == 1){
cout << "NO" << endl;
}else{
cout << "YES" << endl;
}
}
}