HDU1251 統計難題(字典樹)

2021-08-20 05:45:19 字數 1063 閱讀 5933

用字典樹,儲存字首個數,每次插入的時候加一。查詢時直接查詢到待查詢字首的最後乙個字母,如果為字首,那麼一定儲存過,否則肯定沒儲存過,答案就為0.

每次查詢是可以認為每次插入和查詢都是o(len(str))的,因為每次查詢只需要沿著字典樹走下來就好了。需要注意的是記憶體開銷。

題目沒說總共有多少個待查詢子串,一開始一直超時,我以為是寫掛了。

假設要插入

n n

個串,串最長為le

nmax

' role="presentation">len

maxl

enma

x,最差情況,需要開的空間為,n∗

lenm

axn ∗l

enma

x, 即認為每個字元都不同。

#include 

#include

#define mem(x,y) memset(x,y,sizeof x)

#define rep(i,a,b) for (int i = a; i<=b; ++i)

using

namespace

std;

const

int nmax = 1e6 + 10;

const

int inf = 0x3f3f3f3f;

typedef

long

long ll;

typedef

double db;

#define sigma_size 26

#define maxlength 500000

typedef

struct

inline

int idx(char c)

void insert(char *s, int v)

u = ch[u][c];

val[u] ++;}}

int search(char *s, int v)

return val[u];

}} trie;

trie trie;

int main()

HDU 1251統計難題(字典樹)

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

HDU1251統計難題 字典樹

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

hdu 1251 統計難題 字典樹

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