hdu 1251 字典樹入門

2021-07-22 13:58:09 字數 1516 閱讀 1055

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

input

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

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

output

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

就是乙個基礎的字典樹,,是一種樹形結構。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串)。它的優點是:利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

對於在一堆字串中找某個字串,或某些公共字首的字串,複雜度為o(l),l為字串的長度。

然後就是根結點表示空字串,每一條表表示根節點字串後接乙個新的字元,對應兒子就是接上該字元後的新字串。

簡單就是從根節點走到任意一點,路徑上經過的邊上字元就組成了該節點存的字串。

一般,字典樹比較習慣用指標搞;

#include 

#include

#include

#include

using namespace std;

struct node

};node *root=new node();

void inserts(char

str)

tmp->account++;

}int query(char

str)

return tmp->account;

}int main()

順便貼乙個陣列搞的字典樹。

#include 

#include

using

namespace

std;

const

int maxn = 500000;

const

int maxw = 20;

struct node

} t[maxn];

char word[maxw];

int sz =1; //結點總數

void insert(char* s)

u = t[u].child[pos]; //往下走

t[u].cnt++;

} t[u].f = 1;

t[u].acnt++;

} int find(char* s)

u = t[u].child[pos]; //往下走

} return t[u].cnt;

} int main()

while(gets(word))

return

0;

}

HDU 1251 字典樹 入門

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

HDU1251字典樹模板

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

hdu 1251 字典樹例題

題意 給出許多個字串 然後接下來再給出詢問 每乙個詢問都是乙個字串,問以這個字串為字首的單詞有多少個 這是字典樹典型例題 我們將題意給出的字串建字典樹,在建的時候,在每個節點位置都sum x 詢問的時候 用單詞跑一遍字典樹,在跑到最後乙個單詞的節點的時候,返回此節點的sum即可 1 include2...