字典樹,trie樹 樹之呼吸 肆之型 字首統計

2022-05-05 22:54:09 字數 2167 閱讀 6121

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 #include4

using

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新...