hdu 2846 字典樹《怪我思維不夠跳躍》

2022-05-13 17:59:58 字數 1862 閱讀 5099

這題 一眼望去  又tm想用map了。。

想起自己已經學過 字典樹了 這題 需要拆分出給的字串的每個子串 還是蠻麻煩的

然後就是再去匹配查詢了

其實 這題 我覺得難點是再有沒有想到將字串拆分成子串進行create

想到了這點 還有一點 就是你怎麼判斷重一性 《可能記錯了》 或者說 假如有個字串aabb那麼你可以拆成a a b b aa ab bb aab abb aabb但是對於a的數量只應該+1次 而不是2次

b也同樣。。

我說到這了 可能你想到了....bingo 我們需要乙個flag標記變數

--------看上面說的狠輕鬆   2把lol打完 我tm地才想到 flag標記變數來做

我這題 還是用的動態版字典樹 寫起來實在太方便了啊。。

我待會 再貼份 靜態版的上來 先去次飯 =-=

1 #include 2 #include 3

using

namespace

std;45

const

int size = 26;6

struct

trie7;

12 trie*root;

13void

init( )

1422}23

24void create( char* str , int len , int

flag)

2540 p->next[id] =q;41}

42 p = p->next[id];43}

44if( p->flag!=flag )

4549}50

51int find( char*str )

5262 p = p->next[id];63}

64return p->cnt;65}

6667

intmain()

6884}85

}86 cin >>m;

87while( m--)

8892

return0;

93 }

view code

靜態版的 寫起來 就是麻煩了點 但是速度也沒快多少啊=-=  難道是我寫的太差嘛

#include #include 

using

namespace

std;

int sum = 0

;const

int size = 26

;const

int num = 1000010

;struct

trie

;trie node[num];

void init( int

root )

}void create( char* str , int len , int

flag)

else

}if( node[root].flag!=flag )

}int find( char*str )

root =node[root].next[id];

}return

node[root].cnt;

}int

main()}}

cin >>m;

while( m--)

return0;

}

view code

today:

你能用  一句話總結自己過去的10年嗎?

十年前總是計畫著十年後

十年後時刻回憶著十年前

-------扯淡

以我20歲而言

十年前 才10歲 還在玩捉迷藏了

十年後 才30歲 不知道在幹什麼了

----------開心就好

hdu2846(字典樹好題)

字典樹的好題 題意 給你n個串,然後又q次詢問,輸出n個串中包含改串的個數 思路 這題非常考驗個人的分析能力,最初的想法是用ac自動機或者是字尾陣列做,但有感覺不可行,最後看了題解才知道要用字典樹,對n個串的子串的字首建立字典樹,注意 同乙個串可能有相同的子串,所以要有個flag標記。首先要注意的是...

hdu 2846 經典字典樹

思路 因為字典樹只能讀取字首有多少個相同的,對於求子串可以將字串分成 多個字串看成單獨的字串 進行建 字典樹,但要注意這兩個字串 abab,ab 他們的字串都有 ab a 所以在建樹時 判斷是否同乙個字串 不同就加 1 include include include include using na...

hdu 1251 字典樹入門

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