PAT乙級—1040. 有幾個PAT(25)-native
阿新 • • 發佈:2018-12-24
字串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
思路:其實一開始是想先找完第一個P所對應所有的PAT再往下迴圈,這樣就造成了臃腫以及很多不必要的遍歷,而此種方案,對每一個字元的遍歷都用到了,馬上投入計算,效率則高。
#include<iostream>
#include<string>
using namespace std;
int main(){
string str;
int num_t=0,num_at,num_pat=0;
cin>>str;
for(int i=str.size()-1;i>=0;--i){
if(str[i]=='T') //如果是T,則記錄T的個數
_t++num;
if(str[i]=='A') //如果是A,計算出A與T組成AT的個數:即當前的這個A加上這個A之後的T。如果還是A,則就是AT的的數量加上T的數量,如果又是T,則T的個數加1,再計算的時候則再加上
num_at=(num_at+num_t)%1000000007;
if(str[i]=='P') //如果是P,則計算P與AT組成的個數
num_pat=(num_at+num_pat)%1000000007;
}
cout<<num_pat;
return 0;
}
題目連結: