1040 有幾個PAT 25 分

2021-09-29 21:40:19 字數 1293 閱讀 3441

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

輸入格式:

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

輸出格式:

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

輸入樣例:

輸出樣例:

2
一開始的思路是以p為結點找每個p後面有多少的a,然後再找每個a後面有多少個t,25分的題三重迴圈,時間複雜度o(n^3),不出所料得超時。

之後改進了一下,以a為結點,只要計算a前面有多少個p後面有多少個t然後乘積相加,在計算p的個數的同時計算a的個數,減少一層迴圈,時間複雜度o(n^2),還是超時。。。

第三次,先迴圈一遍記錄t的總數,將求a之後的t的個數的第二層迴圈轉化為t的總數-a之前t的個數,時間複雜度o(n)。

#include

#include

using

namespace std;

intmain()

for(

int i =

0; i < a.

size()

;++i)

cout << sum;

return0;

}

//超時**

#include

#include

using

namespace std;

intmain()

}}} cout << sum;

return0;

}

//超時版2.0

#include

#include

using

namespace std;

intmain()

sum =

(sum + count1 * count2)

%1000000007

; count2 =0;

} cout << sum;

return0;

}

1040 有幾個PAT 25 分

現給定字串,問一共可以形成多少個pat?輸入只有一行,包含乙個字串,長度不超過10 5 只包含p a t三種字母。在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。2 includeusing namespace std int countp ...

1040 有幾個PAT 25分

思路分析一 此題如果直接暴力會超時,所以應該找到規律。通過觀察輸出結果其實就是對於乙個確定位置的a來說,其左邊p的個數乘以其右邊的t的個數。那麼接下來的工作就是統計確定位置a左邊的p的個數。可以設定乙個資料leftnump,記錄p的個數。如果當前位i是p,那麼leftnump i 否則,leftum...

1040 有幾個PAT 25分

現給定字串,問一共可以形成多少個pat?輸入只有一行,包含乙個字串,長度不超過10 5 只包含p a t三種字母。在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。我新增了一部分除錯輸出,繼而明白了 一丟丟吧,其實查詢pat,當且僅當找到p,再...