B 統計難題 字典樹

2021-09-11 18:46:47 字數 1472 閱讀 9696

題目描述

ignatius最近遇到乙個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). 

input

輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignatius統計的單詞,乙個空行代表單詞表的結束.第二部分是一連串的提問,每行乙個提問,每個提問都是乙個字串. 

注意:本題只有一組測試資料,處理到檔案結束. 

output

對於每個提問,給出以該字串為字首的單詞的數量.  

sample input

banana

band

beeabsolute

acmba

bband

abc

sample output

231

0

這道題是我的乙個學長講給我們的,我覺得題目比較有代表意義,並且用到的方法也很好,所以就寫這篇部落格,再分析一下。本題用到的主要方法是字典樹,相信網上有很多好的文章也解釋的很詳細了,但我做這道題的心得對於任何乙個問題都有他的方法,或許我們不知道這一題他考的是什麼內容,用什麼樣的的演算法可以解決。這主要原因是我們刷題刷的太少了,遇見的少了,碰見一道題不知道用什麼樣的方法去做,這是很恐怖的一件事,所以這就激勵我們努力地去刷題,沒有什麼是一成不變的,只要我們肯努力,相信有一天我們也會改變,也會有出彩的那一天,或許就在不久的將來。

這道題如果就用平常的解法的話,你肯定會想到用暴搜,但無疑這樣的複雜度太高了,必然會超限。所以我們就想有沒有什麼樣的方法可以降低時間複雜度呢!這是你可能就想到了字典樹。字典樹可以類似是一棵大樹,他有很多的分支,每乙個分支下面又包含了許多小的分支,這樣他就把複雜的問題簡單化了,每乙個分支都有標記點,很容易找到答案。如果有新的內容要加入,他會在適當的位置把它新增上,這樣前面很多步驟就優化掉了,從而問題的已解決。

#include#include#include#include#includeusing namespace std;

const int maxn=1e6+5;

typedef long long ll;

int tree[maxn][26];

int dis[maxn];

int sz=0;

char a[100];

int init(char *x)

}int find(char *x)

return dis[u];

}int main()

while(~scanf("%s",a))

return 0;

}

統計難題(字典樹)

description ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignati...

統計難題 (字典樹)

problem description ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師...

統計難題(字典樹)

ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignatius統計的單詞,乙個空行...