字典樹的應用

2021-07-15 18:10:35 字數 1283 閱讀 3721

論吹牛,學弟一點也不輸個學長。為了找到自己的存在感,學弟又和學長在比誰前女友多,

於是2個人撕逼開始了,學弟說我在大一的時候談了a個女朋友,學長說那是我乙個星期的

數量,我大一的時候談了ab個女朋友,學弟又說加上高中的我談了abc個女友,學長再次

不服,加上高中我談了abcdf個女朋友(想必大家已經明白了,反正下乙個人一定要證明自己

的女朋友比另乙個人多,因此說的女朋友的數量一定是在上一位

的基礎上增加的,並且前面的字母一定要一樣),直到2個人吹破天為止。給出這些人吹

牛能用的數量的彙總(即由小寫字母組成串的彙總),請問雙方最多可以互吹多少輪,所

有吹牛用的數量都是用小寫英文本母構成。

(一輪中必須2個人都要吹牛才算一輪,如果第乙個人吹完牛第二個人沒有繼續吹了那麼此輪不算)。

input:第一行為t,表示有t組事例(1<=t<=15)。接下來給出乙個數字表示這些人說的話的彙總

一共有n(1<=n<=5000)句,然後接下來的n行每行乙個數量(即乙個由小寫字母組成的字串,字元

串的長度為m,1<=m<=100)

output:輸出每個例項中2個人最多可以互吹多少輪。

樣例:input:25

aadadfadfg

qwer

3werwew

output:21

解題思路:將輸入的資料建立字典樹,凡是根節點的v值都為1,非根節點的值設為0;然後對於每個輸入的字串,進行查詢,當v的值為1時ans++;對於每個字串都得到乙個ans的值,取ans的最大值除以2,及得最終的結果。

#include #include #include #include using namespace std;

#define max 26

struct trie;

trie *root;

void insert(char *s)

pre = pre->next[id];

}pre->val = 1;//根節點的val設為1

}int search(char *s)

return ret/2;

}char s[50005][105];//把s定義為二維陣列,

int main()

int ans = 0;

for(int i = 0; i < n; i++)

ans = max(ans, search(s[i]));//查詢rnt的最大值

printf("%d\n", ans);

}return 0;

}

字典樹的應用

又稱單詞查詢樹,trie樹 是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比 雜湊表高。定義 1 typedef struct...

字典樹應用

trie,又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。相對來說,trie樹是一種比較簡單的資料結構.理解起來比較簡單,正所謂簡單的東西也得付出代價.故trie樹也有它的缺點,trie樹的記憶體消耗非常大.當然,或許用左兒子右兄弟的方法建樹...

字典樹及其應用

字典樹是一種比較特殊的樹,邊上有邊權 至少我是怎麼理解的 又名 trie 樹。大概長這樣 插入了cap,cat,csp,co,code 邊上是字符集,點上是點的編號,塗成藍色的代表是單詞的結尾。字符集可以是a z,0 9,true和false等等。字典樹有效的組織了單詞的關係,節省了時間和空間。vo...