PAT乙級|C語言|1040 有幾個PAT (25分)

題目

字符串 APPAPT 中包含了兩個單詞 PAT,其中第一個 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二個 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

現給定字符串,問一共可以形成多少個 PAT

輸入格式:
輸入只有一行,包含一個字符串,長度不超過10510^5,只包含 PAT 三種字母。

輸出格式:
在一行中輸出給定字符串中包含多少個 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章