1003 我要通过!

这道题是一道找规律的题目。第一次做时,看了半天题意看不懂。

第3个条件是第2个条件的一种延申。

对于条件2,AAPATAA“答案正确”,再看条件3,AAPAATAAAA必然“答案正确”

对于条件2,AAPAATAAAA“答案正确”,再看条件3,AAPAAATAAAAAA必然答案正确。

... ...

可以推断出,P左边的A的个数,乘以P与T之间A的个数,等于T右边的A的个数。

注意:空字符串可理解为 空气。

#include"iostream"
using namespace std;
int main() {
    int n;
    cin>>n;
    string str;
    while(n--) {
        cin>>str;
        bool flag = true;
        int posP = -1,posT = -1;
        for(int i = 0; i < str.length(); ++i) {
            if(str[i] == 'P' && posP == -1) {//是P字符并且是第一次出现,则记录下标
                posP = i;
            } else if(str[i] == 'T' && posT == -1) {//是T字符并且是第一次出现,则记录下标
                posT = i;
            } else if(str[i] == 'A') { //是A字符则跳过
                continue;
            } else { //如果出现多个P,或者多个T,或者非P,A,T字符,则结束判断
                flag = false;
                break;
            }
        }
        //P或者T不存在,或者P在T的后面,或者PT之间没有A
        if(flag == false ||posP == -1 || posT == -1 ||posP > posT || posT-posP == 1)
            printf("NO\n");
        else {
            int x = posP;//表示字符P左边共有x个字符A
            int y = posT-posP - 1;//表示字符P与T之间共有y个字符A
            int z = str.length() - posT - 1;//表示字符T右边共有z个字符A
            if(x*y == str.length() - posT - 1)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

 

posted @ 2020-02-15 14:08  tangq123  阅读(158)  评论(0编辑  收藏  举报