字典樹模板及例題

2021-09-27 12:11:58 字數 2429 閱讀 7374

字典樹

time limit: 1000ms memory limit: 65536kb

problem description

遇到單詞不認識怎麼辦? 查字典啊,已知字典中有n個單詞,假設單詞都是由小寫字母組成。現有m個不認識的單詞,詢問這m個單詞是否出現在字典中。

input

含有多組測試用例。

第一行輸入n,m (n>=0&&n<=100000&&m>=0&&m<=100000)分別是字典中存在的n個單詞和要查詢的m個單詞.

緊跟著n行,代表字典中存在的單詞。

然後m行,要查詢的m個單詞

n=0&&m=0 程式結束

資料保證所有的單詞都是有小寫字母組成,並且長度不超過10

output

若存在則輸出yes,不存在輸出no .

example input

3 2aab

aaad

acad

0 0example output

noyes

hint

author

gyx

#include

#include

#include

#include

using

namespace std;

struct node

tree[

1000000];

//建立靜態節點陣列

int top;

struct node*

create()

return p;};

struct node*

initbttree()

//初始化字典樹

void

inserttree

(char a,

struct node*root)

//在字典樹中插入字串

p->cnt++;}

bool

find

(struct node*root,

char a)

//在字典樹中查詢字串,並返回字串的數量

return

true;}

intmain()

while

(m--

)else}}

return0;

}

例題

迷之好奇

problem description

ff得到了乙個有n個數字的集合。不要問我為什麼,有錢,任性。

ff很好奇的想知道,對於數字x,集合中有多少個數字可以在x前面新增任意數字得到。

如,x = 123,則在x前面新增數字可以得到4123,5123等。

input

多組輸入。

對於每組資料

首先輸入n(1<= n <= 100000)。

接下來n行。每行乙個數字y(1 <= y <= 100000)代表集合中的元素。

接下來一行輸入m(1 <= m <= 100000),代表有m次詢問。

接下來的m行。

每行乙個正整數x(1 <= x <= 100000)。

sample input

312345

66666

12356345

12345

356sample output 10

1分析:

本題資料資料量較大,顯然是不可以用常用方法解決的,這時候就可以用字典樹,我們可以讓字典樹的每乙個節點儲存乙個數字,我們從後往前插入數字,並使p->cnt++(表示在這個集合中這一位的數字的個數加一)例如12345插入的時候3在第三層插入並使這一層這個節點加一,在再插入2345時候由於這個節點已經開闢了,我們在遍歷過程中經過了這個節點 便使其加一表示以345為字尾的數已經有兩個了,這樣我們在查詢345的時候 我們遍歷到3的時後p->cnt的值就是以345為字尾的數字的個數

#include

#include

#include

#include

using

namespace std;

struct node

tree[

200000];

int top;

struct node*

create()

return p;};

void

insertt

(char a,

struct node*root)

}int

searchh

(char a,

struct node*root)

return p-

>data;

}int main (

)scanf

("%d"

,&m)

;while

(m--)}

return0;

}

字典樹 例題

給定 n個長度不超過10的數字串,問其中是否存在兩個數字串 s t,使得 s是 t的字首,多組資料。輸入格式 第一行乙個整數 t,表示資料組數。對於每組資料,第一行乙個數n,接下來 n行輸入 n個數字串。輸出格式 對於每組資料,若存在兩個數字串 s t,使得 s是 t的字首,則輸出 no 否則輸出 ...

字典樹 例題

關於學習字典樹,可以轉步這篇文章傳送門 例題1 poj3630 hdu 1671 這裡要在插入時候進行檢驗是否存在某個號碼是已存在號碼的字首或者存在某個號碼是當前插入號碼 的字首。先說hdu1671,因為poj的使用動態建樹給tle了,所以要用靜態建樹,這裡先說動態建樹 hdu1671 感覺可以做模...

Trie字典樹例題

前幾天做了個trie樹的題,正好記一下。首先先看乙個簡單題 acwing 143.最大異或對 題目 在給定的n個整數a1,a2 an中選出兩個進行 xor 異或 運算,得到的結果最大是多少?第一行輸入乙個整數n。第二行輸入n個整數a1 an。輸出乙個整數表示答案。1 n 105 0 a i 23 1...