PAT B1003 我要通过!

PAT B1003 我要通过!_第1张图片
思路:简单的字符串处理,题意有点难理解,第三个条件可以一直递推下去,可以得到一个结论,就是(P前面A的个数)*(P和T之间的A的个数)== (T后买呢的A的个数)。
多写几个满足条件的字符串,然后递推下去就能得到规律。

#include
#include
using namespace std;
int main(){
     
    int cnt;
    cin >> cnt;
    getchar();
    while(cnt--){
     
        string test;
        getline(cin,test);
        unordered_map<char,int> m;
        int flag = 0,front=0,mid=0,rear=0;
        for(int i=0;i<test.size();i++){
     
            if(test[i]!='P'&&test[i]!='A'&&test[i]!='T'){
     
                break;
            }
            m[test[i]]++;
            if(test[i]=='P'&&front==0) front = m['A'];
            if(test[i]=='T'&&mid==0) mid = m['A']-front;
            rear = m['A'] - front - mid;
        }
        if(front*mid==rear&&mid!=0) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

这里有一个地方不是很明白,这个题目完全AC了,但是AAAAAAAT这种情况也是正确的,不是很懂题目中说的 必须仅有 P A T 这三种字符。

你可能感兴趣的:(PAT乙级)