我觉得这是PAT中最坑的一道题,表述令人很不适应
分析过程:
条件1.只有P,A,T三种字符
条件2.xPATx正确,x可以是空串,或者由A组成的字符串
条件3.如果aPbTc是正确的,aPbATca也是正确的,a,b,c与上一条件x相同
1,2为基本条件,根据1,2推3
根据条件1,2=》》》xPATx正确
条件3中:
首先有xPATx正确
aPbTc中a=x,b=1,c=x;
则有aPbATca中a=x,b+1=2,c+a=2x;
则有a=x,b+1=3,c+a=3x;
。。。。
以此类推可得对于aPbTc要满足ab=c,而且b》=1
<-------------------------------------------->
解决了逻辑问题,要处理代码了。
将一行数据存入字符串,遍历,每个字符map映射加一,并保存PT的位置
只要map中PT只有一个,A至少一个
另外要使a
b = c,只要p * (t - p - 1) == strlen(arr) - t - 1,不用考虑T是否在P前边,如果那样计算出来的b为负

#include<stdio.h>
#include<string.h>
#include<map>
using namespace std;

int main() {
    int N; scanf("%d", &N);
    for (int i = 0; i<N; i++) {
        char arr[101];
        scanf("%s", arr);
        int p, t;
        map<char, int> mp;
        for (int j = 0; j<strlen(arr); j++) {
            mp[arr[j]]++;
            if (arr[j] == 'P') p = j;
            if (arr[j] == 'T') t = j;
        }
        if (mp['P'] == 1 && mp['T'] == 1 && mp['A'] != 0 && mp.size() == 3 && p*(t - p - 1) == strlen(arr) - t - 1) {
            printf("YES\n");
        }
        else {
            printf("NO\n");
        }
    }
    return 0;
}