B1040 有幾個PAT
阿新 • • 發佈:2019-01-11
字串 APPAPT
中包含了兩個單詞 PAT
,其中第一個 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二個 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
現給定字串,問一共可以形成多少個 PAT
?
輸入格式:
輸入只有一行,包含一個字串,長度不超過105,只包含 P
、A
、T
三種字母。
輸出格式:
在一行中輸出給定字串中包含多少個 PAT
。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。
輸入樣例:
APPAPT
輸出樣例:
2
#include<stdio.h> #include<string.h> typedef long long LL; int main(){ char str[100010]; LL hashTable[110]={0},sum=0; scanf("%s",str); int len=strlen(str); for(int i=0;i<len;i++){ if(str[i]=='T'){hashTable['T']++;} } for(int i=0;i<len;i++){ if(str[i]=='A'){sum=(sum+(hashTable['P']*hashTable['T']))%1000000007;hashTable['A']--;} if(str[i]=='P'){hashTable['P']++;} if(str[i]=='T'){hashTable['T']--;} } printf("%lld",sum); }
分析:剛開始的時候,題意理解錯誤,不知道有沒有和我一樣的小夥伴,以為是按照順序下去(如果第五位是P,查詢第五位開始下面有沒有A以及T,如果有的話組成一個PAT),這樣和題意解釋也對。但是後來寫完發現...就三分,懵逼了一下,看了其他博主的才發現自己理解錯誤了
實際應該先查詢A,然後將前面的P的個數乘上後面T的個數,最後取模