PAT B1003我要通过

    技术2022-07-11  112

    这个题目太具有迷惑性了。 重点是规律。 1.整个字符串里面只能有P、A、T三个字符 2.像PAT、APATA、AAPATAA……这种都可以 3.可推 如果是PAT,则ac都为0,那么PAAT可以,PAAAAT可以,PAAAAAAA……AT都可以 如果是APATA,则APAATAA,APAAATAAA,APAAAATAAAA可以 如果是AAPATAA,那么AAPAATAAAA,AAPAAATAAAAAA都可以 总结规律:只能有一个P和T,中间和末尾可以随便插入;开头的A的个数*中间A的个数=结尾的A的个数。 但是A必须有。

    #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main(){ int n; scanf("%d\n",&n); while(n--){ string a; //挪了一下string的位置就全部正确了 cin >> a ; bool flag=true; for(int i=0;i<a.length();i++){ if(a[i]!='P' && a[i]!='A' &&a[i]!='T'){ //只能允许PAT这三个字符出现,如果有其他字符出现,则该字符串出错 flag=false; } } int p=a.find('P'),q=a.find('T'); if(p==string::npos || q==string::npos || q-p==1 || p*(q-p-1)!=(a.length()-q-1)){ //确认前面的A的个数*中间A的个数==末尾A的个数 ,且A必须出现一次 flag=false; } if(flag==true) printf("YES\n"); else printf("NO\n"); } return 0; }
    Processed: 0.017, SQL: 9