[字典樹模版題] 給定n個字串s1,s2…sn,接下來進行m次詢問,每次詢問給定乙個字串t,求s1~sn中有多少個字串是t的字首。輸入字串的總長度不超過10^6,僅包含小寫字母。字串 s1(不妨假設長度為 n)被稱為字串 s2 的字首,當且僅當:s2 的長度不小於 n,且 s1 與 s2 前 n 個字元組組成的字串完全相同。
第一行兩個整數n,m。接下來n行每行乙個字串si。接下來m行每行乙個字串表示詢問。
對於每個詢問,輸出乙個整數表示答案
3 2
abbc
abcabc
efg
2
0
把這n個字串插入一顆trie樹中,trie的每個節點上儲存乙個整數cnt,記錄該節點是多少個字串的末尾節點。(為了處理插入重複字串的情況,這裡要記錄個數,而不能只做結尾標記)
對於每個詢問,在trie樹中檢索t,在檢索過程中累加途徑的每個節點的cnt值,就是該詢問的答案。
關於trie樹:本題需要插入和檢索的字串都由小寫字母構成,所以trie每個節點具有26個字元指標分別為a到z。在trie樹中,字元資料都體現在樹的邊(指標)上,樹的節點僅儲存一些額外資訊,例如單詞結尾標記等。其空間複雜度為o(nc),其中n是節點個數,c是字符集的大小。
#include
#include
#include
#include
using
namespace std;
const
int size=
1000010
;// trie每個節點記錄cnt, 根節點為1
int trie[size][26
], cnt =1;
// 存在重複字串
int edtot[size]
;int n, m;
char str[size]
;// 向trie中插入乙個字串
void
insert
(char
* str)
edtot[p]++;
}int
search
(char
* str)
return ans;
}int
main()
for(
int i=
1;i<=m;i++
)}
NCSTOJ 仰視奶牛
t 仰視奶牛 time limit 1 sec memory limit 128 mib back submit edit description 約翰有n頭奶牛,編號為1到n。現在這n頭奶牛按編號從小到大的順序站成了一排,其中奶牛 i 的身高為hi。現在,每頭奶牛都向它的右側望向那些編號較大的奶牛...
NCSTOJ 1473 陣列的度
示例 1 輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面擁有相同度的有如下所示 1,2,2,3,1 1,2,2,3 2,2,3,1 1,2,2 2,2,3 2,2 最短連續子陣列 2,2 的長度為2,所以返回2.input 第一行乙個...
142 猴子報數
猴子報數 n個猴子圍坐一圈並按照順時針方向從1到n編號,從第s個猴子開始進行1到m的報數,報數到第m的猴子退出報數,從緊挨它的下乙個猴子重新開始1到m的報數,如此進行下去知道所有的猴子都退出為止。求給出這n個猴子的退出的順序表。輸入有做組測試資料 每一組資料有兩行,第一行輸入n 表示猴子的總數最多為...