hdu2846(字典樹好題)

2021-06-23 01:22:15 字數 683 閱讀 1098

字典樹的好題

題意:給你n個串,然後又q次詢問,輸出n個串中包含改串的個數

思路:這題非常考驗個人的分析能力,最初的想法是用ac自動機或者是字尾陣列做,但有感覺不可行,最後看了題解才知道要用字典樹,對n個串的子串的字首建立字典樹,注意:同乙個串可能有相同的子串,所以要有個flag標記。

首先要注意的是串的長度小於20,這個條件很關鍵,那麼它的子串最多有(20+1)*20/2 約等於200個, 用字典樹解,建樹的時間複雜度是o(2*10^6)

查詢的時間複雜度為o(2*10^6),總的時間複雜度為o(4*10^6), 1000ms 的時間,不會超時,同時也不會超記憶體

**如下:

#include#include#include#include#include#include#include#include#include#include#include#define n 500000

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

struct node

void insert(string s,int v)

if(flag[u] != v)

return 0;

}

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

這題 一眼望去 又tm想用map了。想起自己已經學過 字典樹了 這題 需要拆分出給的字串的每個子串 還是蠻麻煩的 然後就是再去匹配查詢了 其實 這題 我覺得難點是再有沒有想到將字串拆分成子串進行create 想到了這點 還有一點 就是你怎麼判斷重一性 可能記錯了 或者說 假如有個字串aabb那麼你可...

hdu 2846 經典字典樹

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

HDU1247 字典樹經典題

題意 給你一些單詞,問你其中哪乙個單詞可以由其他兩個單詞組成,還有就是乙個單詞可以由同乙個單詞重複組成兩次。題解 把乙個單詞拆分成兩個進去find函式查詢,如果兩個都可以說明該單詞由兩個單詞組成。include include include using namespace std const in...