HDOJ2846解題報告 字典樹

2022-03-01 11:16:43 字數 1589 閱讀 4880

題目概述:

給你p個單詞以及q個詢問,對於每個詢問,回答乙個整數,表示詢問的字串是多少個所給的單詞的子串。

大致思路:

很容易看出是乙個字典樹的題,因為只要是子串都滿足題意,所以在插入的時候需要多插入一些,例如:

對於單詞abcd,則需要插入字串abcd,bcd,cd,d;

然後插入的時候順便統計一下個數,這樣查詢起來就當做正常的字典樹查詢就可以了。

需要注意的是,對於同乙個字串,插入子串時如果沒有新建節點是不要使該節點統計的個數增加的。

**:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11

using

namespace

std;

1213

#define sacnf scanf

14#define scnaf scanf

15#define maxn 1000000

16#define maxm 26

17#define inf 1061109567

18#define eps 0.001

19const

double pi=acos(-1.0

);20

#define mod 1000000007

21#define maxnum 10000

22void swap(int &a,int &b)

23int abs(int x)

24 typedef long

long

ll;25

26struct

node

27 tire[maxn];

3132

int c=1;33

char

s[maxm];

3435

void insert(int root,char *s,int

n)36

47 root=tire[root].next[t];

48if(tire[root].num!=n) tire[root].cnt++; //不需要增加個數的情況

49 tire[root].num=n;s++;50}

51}5253

int found(int root,char *s)

5461

return

tire[root].cnt;62}

6364

intmain()

6580 scanf("

%d",&n);

81while(n--)

8286

//clock_t ed=clock();

87//

printf("\n\ntime used : %.5lf ms.\n",(double)(ed-st)/clocks_per_sec);

88return0;

89 }

HDOJ2072解題報告 字典樹

題目概述 給你一些句子,統計每個句子中單詞的個數。大致思路 這個題有幾種思路,一種是用tire樹,在插入單詞過程中如果新建了乙個節點便說明這個單詞是新單詞,需要注意的是有些單詞可能是另一些的字首,這裡需要特殊處理一下。還有就是stl了,map,set都行,因為我沒有用stl就不細說了。1 inclu...

hdu 2846 經典字典樹

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

HDOJ1698解題報告 線段樹模板

題目概述 一段區間從1 n,每次操作將某一段全部改為x,操作完成後求整個區間和。大致思路 典型的乙個rmq模板題。只需要注意add操作裡pushdown的 改成 就可以了。還有注意在build tree的時候初始化整棵樹!還有注意在build tree的時候初始化整棵樹!還有注意在build tre...