1003

image.png

image.png

這道題讓我想到了編譯原理的內容矩父,首先這道題的難點在于讀懂第3個條件.這三個條件不是孤立的铣卡,是有聯(lián)系的:
正確答案的字符串集合:條件2的字符串集合+條件3的字符串集合
條件3的字符串集合是由條件2的字符串集合擴充而來的

我們先分析條件2:
xPATx 注意前后兩個x是一模一樣的偏竟。
x只能包含A或者為空
那么條件2的字符串集合是中間有一個PAT煮落,前后有數(shù)目一樣的字母A(0個或者n個)

再分析條件3:
我一開始讀條件3真是一頭霧水。讀了好幾遍踊谋,看了一下解析才回過味來蝉仇。
aPbTc:b中至少含有一個A,未擴充時a和c有同樣數(shù)目的A
aPbATca:b中添加一個字母A殖蚕,c中添加一個a

那么設a中有y個字母A轿衔,那么未擴充的c也有y個字母A;
PT之間有x個字母A睦疫,除了最開始的PAT中的一個A害驹,后來添加了(x-1)個A,擴充了(x-1)次蛤育;
T之后又z個字母A宛官。

z的字母A個數(shù):(x-1) * y + y = z 也就是 x * y = z


示意圖

PS:這道題讓我學習到了一個挺有意思的函數(shù):string類型的find_first_of()函數(shù)。它可以找到某個字符第一次出現(xiàn)的位置瓦糕,返回下標底洗。計算三個位置的A的數(shù)目很方便。

代碼:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int cou;
    cin>>cou;

    vector<string> strs;
    for(int i=0;i<cou;i++)
    {
        string str;
        cin>>str;
        strs.push_back(str);
    }

    for(int i=0;i<cou;i++)
    {
        string str=strs[i];
        bool flag=true;
        //條件一
        for(int j=0;j<str.length();j++)
        {
            if(str[j]!='P'&&str[j]!='A'&&str[j]!='T')
                flag=false;
        }

        //只有一個P
        int countP=0;
        for(int j=0;j<str.length();j++)
        {
            if(str[j]=='P')
                countP++;
        }
        if(countP!=1)
            flag=false;

        //只有一個T
        int countT=0;
        for(int j=0;j<str.length();j++)
        {
            if(str[j]=='T')
                countT++;
        }
        if(countT!=1)
            flag=false;

        //P在T之前
        if(str.find_first_of('P')>str.find_first_of('T'))
            flag=false;

        //計算三個位置A的個數(shù)
        int numA_1,numA_2,numA_3;
        numA_1=str.find_first_of('P');
        numA_2=str.find_first_of('T')-str.find_first_of('P')-1;
        numA_3=str.length()-str.find_first_of('T')-1;
        
        //位置2至少有一個A
        if(numA_2<1)
            flag=false;
        //a*b=c
        if(numA_1*numA_2!=numA_3)
            flag=false;

        if(flag)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }

    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末刻坊,一起剝皮案震驚了整個濱河市枷恕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谭胚,老刑警劉巖徐块,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灾而,居然都是意外死亡胡控,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門旁趟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼激,“玉大人,你說我怎么就攤上這事锡搜〕壤В” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵耕餐,是天一觀的道長凡傅。 經常有香客問我,道長肠缔,這世上最難降的妖魔是什么夏跷? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任哼转,我火速辦了婚禮,結果婚禮上槽华,老公的妹妹穿的比我還像新娘壹蔓。我一直安慰自己,他們只是感情好猫态,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布佣蓉。 她就那樣靜靜地躺著,像睡著了一般懂鸵。 火紅的嫁衣襯著肌膚如雪偏螺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天匆光,我揣著相機與錄音套像,去河邊找鬼。 笑死终息,一個胖子當著我的面吹牛夺巩,可吹牛的內容都是我干的。 我是一名探鬼主播周崭,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼柳譬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了续镇?” 一聲冷哼從身側響起美澳,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摸航,沒想到半個月后制跟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡酱虎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年雨膨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片读串。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡聊记,死狀恐怖,靈堂內的尸體忽然破棺而出恢暖,到底是詐尸還是另有隱情排监,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布杰捂,位于F島的核電站社露,受9級特大地震影響,放射性物質發(fā)生泄漏琼娘。R本人自食惡果不足惜峭弟,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脱拼。 院中可真熱鬧瞒瘸,春花似錦、人聲如沸熄浓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赌蔑。三九已至俯在,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娃惯,已是汗流浹背跷乐。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趾浅,地道東北人愕提。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像皿哨,于是被迫代替她去往敵國和親浅侨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容