現給定字串,問一共可以形成多少個 pat?
輸入格式:
輸入只有一行,包含乙個字串,長度不超過105 ,只包含 p、a、t 三種字母。
輸出格式:
在一行中輸出給定字串中包含多少個 pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。
輸入樣例:
輸出樣例:
2
題目分析:一開始很容易想到反覆遍歷3遍字串,第一遍找到p,第二遍找到a,第三遍找到t。相當於用窮舉法計算pat總共出現的數目。但是會出現執行超時
//測試點2,3,4執行超時
#include
#include
using
namespace std;
intmain()
}}cout<1000000007
;return0;
}
超時原因分析:核心演算法for迴圈巢狀3次,時間複雜度=o(n3),遇到大數的輸入容易出現超時的情況。應該在演算法上優化,降低時間複雜度。
#include
#define mod 1000000007
using
namespace std;
intmain()
cout
}
思路:基本上套的是柳婼的思路。每當遇到一次a,先計算(a前p的總和)與(a後t總和)的積,將這些積累加之後再對1e9+7取餘。
改良後的演算法只有2次並列的for迴圈,時間複雜度為o(n)遠小於之前的o(n3),避免了執行超時。
pat乙級題解大全 c++
PAT 1040 有幾個PAT 25 分
現給定字串,問一共可以形成多少個 pat?輸入只有一行,包含乙個字串,長度不超過10 5,只包含 p a t 三種字母。在一行中輸出給定字串中包含多少個 pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。一開始打算用三層for迴圈暴力解題,但是一看到字串長度,遂放棄了這個想法...
PAT乙級 1040 有幾個PAT(25)
題目 現給定字串,問一共可以形成多少個pat?輸入格式 輸入只有一行,包含乙個字串,長度不超過105,只包含p a t三種字母。輸出格式 在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對1000000007取餘數的結果。輸入樣例 輸出樣例 pat鏈結 sum of 每個 a 左邊...
PAT 乙級 1040 有幾個PAT(25)
現給定字串,問一共可以形成多少個pat?輸入格式 輸入只有一行,包含乙個字串,長度不超過105,只包含p a t三種字母。輸出格式 在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對1000000007取餘數的結果。輸入樣例 輸出樣例 2分析 這道題目的關鍵就在於怎麼算得快,列舉法...