PAT 乙級 1040 有幾個PAT

2022-03-30 19:22:53 字數 1271 閱讀 8227

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

輸入只有一行,包含乙個字串,長度不超過10^​5​​,只包含 p、a、t 三種字母。

在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。

2
/*

觀察下面3段字串:

pa (只能組成1個pa)

papa (第乙個a能組成1個pa, 第2個a能組成2個pa(=該a前p的個數), 一共1+2=3個pa)

papapa (1 + 2 + 3 = 6個pa)

現在我們看一下papaattpattt這個字串, 我們不要一開始就盯著pat這

3個字元, 而是先看字串裡有多少p, 再看有多少pa, 最後確定有多少pat.

從左到右乙個乙個字元的看, 下面我給字串標上號

papaattpat t t

0123456789 10 11

走到下標0, p=1, pa=0, pat=0

走到下標1, p=1, pa=1, pat=0

走到下標2, p=2, pa=1, pat=0

走到下標3, p=2, pa=1+2=3, pat=0

走到下標4, p=2, pa=3+2=5, pat=0

走到下標5, p=2, pa=5, pat=5

走到下標6, p=2, pa=5, pat=5+5=10

走到下標7, p=3, pa=5, pat=10

走到下標8, p=3, pa=5+3=8, pat=10

走到下標9, p=3, pa=8, pat=10+8=18

走到下標10, p=3, pa=8, pat=18+8=24

走到下標0, p=3, pa=8, pat=24+8=34

寥寥10幾行搞定, 思想太重要了.

注意取餘數是在中間過程就取, 不用等到最後總數再取餘.

*///

#include

#include #define mod 1000000007

//using namespace std;

const

int maxn = 100010

;int

main()

printf(

"%lld\n

", pat);

}//system("pause");

return0;

}

參考:1040. 有幾個pat(25)

PAT乙級 1040 有幾個PAT

現給定字串,問一共可以形成多少個 pat?輸入格式 本來是說從pat甲級再開始記錄做題記錄的,但是難度明顯高於我自己的想象,所以現在在乙級題中,覺得特別有價值的需要來記錄一下。自己的 如下 include define m 1000000007 include using namespace std...

PAT 乙級 1040 有幾個PAT

題目 題目鏈結 思路 這道題的思路是從網上搜的,要想知道構成多少個pat,那麼遍歷字串後對於每一a,它前面的p的個數和它後面的t的個數的乘積就是能構成的pat的個數。然後把對於每乙個a的結果相加即可。辣麼就簡單啦,只需要先遍歷字串數一數有多少個t,然後每遇到乙個t呢cntt 每遇到乙個p呢,cntp...

PAT乙級 1040 有幾個PAT

題目 1040 有幾個pat 原先思路自己也知道肯定會超時,還是寫了,畢竟時間複雜度o n3 比較直觀找到每個pa,檢視後續有多少個t,求和。正確思路 看了下大佬的思路,是看每個a前的p和後的t的積,豁然開朗,修改了自己的 全部通過。include using namespace std intma...