題目
字符串 APPAPT
中包含了兩個單詞 PAT
,其中第一個 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二個 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
現給定字符串,問一共可以形成多少個 PAT
?
輸入格式:
輸入只有一行,包含一個字符串,長度不超過,只包含 P
、A
、T
三種字母。
輸出格式:
在一行中輸出給定字符串中包含多少個 PAT
。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。
輸入樣例:
APPAPT
輸出樣例:
2
AC代碼
- 主要還是數學問題吧,這類問題會一點點數學還是很快ac的。
- 不需要讀入字符串,輸入作爲一個整體的字符串沒有價值。逐一讀入並做統計即可。
- 每次遇到
P
,統計P
的數量;sum_P
爲當前讀入的P
的數量。 - 每次遇到
A
,統計PA
組合的數量:在A
前面的每一個P
都能和該A
組成不同PA
組合。將該A
能組成的PA
組合的數量加到sum_PA
中。 - 每次遇到
T
,統計PAT
組合的數量:在T
前面的每一個PA
組合都能和該T
組成不同PAT
組合。將該T
能組成的PAT
的數量加到sum_PAT
中。 - 套娃:統計
PATNB
的數量,只需繼續套娃:每次遇到N
,統計當前PATN
的數量;每次遇到B
,統計當前PATNB
的數量;可無限套娃。
#include<stdio.h>
int sum_p;
int sum_PA;
long long sum_PAT; //該用long就用long,這點空間微不足道
int main(){
for(char temp;(temp=getchar())!='\n';){
if(temp=='P')sum_p++;
if(temp=='A')sum_PA+=sum_p;
if(temp=='T')sum_PAT+=sum_PA;
}
printf("%d",sum_PAT%1000000007);
return 0;
}