d.樹之呼吸-肆之型-字首統計
time limit: 1000 ms
memory limit: 65536 k
total submit: 59 (8 users)
total accepted: 7 (7 users)
special judge: no
description
給定 n 個字串 s1,s2,...,sn。
接下來進行 m 次詢問,每次詢問給定乙個字串 t,
求 s1 ~ sn 中有多少個字串是 t 的字首。
input
輸入第一行為乙個正整數 case,表示測試資料組數;
對於每組測試資料,輸入第一行為乙個正整數 n,表示給定的字串數;
接下來 n 行,給出 n 個字串 s1 ~ sn;
接下來一行乙個正整數 m,表示詢問數;
接下來 m 行,給出 m 個詢問串 t1 ~ tm;
保證:case <= 50;
給定串和詢問串均只由大小寫字母組成;
給定串和詢問串的總長均不超過 2e5。
output
對於每組測試資料,輸出 m 行,每行乙個整數,表示有多少個給定串是 t1 ~ tm 的字首。
sample input
aabaaaaa
aabaabc
abaaba
aabab
abaab
aabsample output
author
陳鑫題意: 給定 n 個字串 s1,s2,...,sn.
接下來進行 m 次詢問,每次詢問給定乙個字串 t,
求 s1 ~ sn 中有多少個字串是 t 的字首.
思路:給n個單詞建乙個字典樹,在列舉ti的字首,看字典樹中是否存在這個字首,如果存在則答案加上這個單詞出現的次數
注意:這裡正常來說按題意陣列長度應該開2e5,但用memset會超時,正確做法是用fill並且去掉第一次初始化(把初始化放結尾),這裡開1e5能過是因為資料水了,
注意字母有大小寫a在a的前面,所以s[i]-'a',來得到字母的編號
ed[rt]標記不僅可以表示是否存在,也可以用來統計出現的次數
注意如果用了freopen則不能關閉流同步,也就是ios::sync_with_stdio(0),否則可以關閉流同步
1 #include2 #include3 #include4using
namespace
std;
5const
int amn=1e5+1; ///
這裡正常來說應該開2e5,但用memset會超時,正確做法是用fill並且去掉第一次初始化(把初始化放結尾),這裡開1e5能過是因為資料水了,
6int tr[amn][60
],ed[amn],tot,x,ans,len,rt;
7void
init()
12char
s[amn];
13void
add()
20 ed[rt]++; ///
這裡由ed[rt]=1,變為了ed[rt]++,可以統計相同的單詞出現了幾次21}
22void
sol()30}
31int
main()
43 scanf("
%d",&m);
44while(m--)49}
50}51/**52
題意: 給定 n 個字串 s1,s2,...,sn.
53接下來進行 m 次詢問,每次詢問給定乙個字串 t,
54求 s1 ~ sn 中有多少個字串是 t 的字首.
55思路:給n個單詞建乙個字典樹,在列舉ti的字首,看字典樹中是否存在這個字首,如果存在則答案加上這個單詞出現的次數
56注意:
57這裡正常來說按題意陣列長度應該開2e5,但用memset會超時,正確做法是用fill並且去掉第一次初始化(把初始化放結尾),這裡開1e5能過是因為資料水了,
58注意字母有大小寫a在a的前面,所以s[i]-'a',來得到字母的編號
59ed[rt]標記不僅可以表示是否存在,也可以用來統計出現的次數
60注意如果用了freopen則不能關閉流同步,也就是ios::sync_with_stdio(0),否則可以關閉流同步61*
*/
Trie樹(字典樹)
trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...
字典樹 Trie樹
字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...
字典樹 trie樹
amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...