PAT1003.我要通過!

題解:
規則1和2是基本要求
規則3:aPbTc ==> aPbATca,那麼可以逆推 aPbATca 到 aPbTc,直到 a’PATa’ 這種形式,說明源字符串是符合要求的
詳細說明:aPbTc,則b中每次減少一個A,c中減少a字符串,直到cPATd形式,若c==d,則說明滿足規則2,即原串符合要求 。

#include <iostream>  
#include <string>  

using namespace std;  

int main()  
{  
    int n;  
    cin>>n;  
    while ( n-- )  
    {  
        string str;  
        cin>>str;  
        int p = str.find_first_not_of('A');                     //找到第一個不是A的字符的位置  
        if ( p == string::npos || str[p] != 'P' )               //未找到或p位置不是P則不符合規則1  
        {  
            cout<<"NO"<<endl;  
            continue;  
        }  
        int t = str.find_first_not_of('A', p+1);                //從p+1位置繼續尋找第一個不是A的字符  
        if ( t == p+1 || t == string::npos || str[t] != 'T' )   //PT之間木有A,或找不到,或不是T,則不符合規則1或2  
        {  
            cout<<"NO"<<endl;  
            continue;  
        }  
        int end = str.find_first_not_of('A', t+1);              //從t+1位置繼續尋找下一個不是A的字符  
        if ( end != string::npos )                              //若找到,則不符合規則1或2  
        {  
            cout<<"NO"<<endl;  
            continue;  
        }  
        int a = p;  
        int b = t - p - 1;  
        int c = str.length() - t - 1;                           //利用規則3,往前遞歸  
        c -= ( b - 1 ) * a;  
        if ( a == c )                                           //通過規則2判斷是否正確  
        {  
            cout<<"YES"<<endl;  
        }  
        else  
            cout<<"NO"<<endl;  
    }  
    return 0;  
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章