HDU 4641 K string 字尾自動機

2022-06-05 07:12:08 字數 737 閱讀 3697

原題鏈結

題意思路

我們知道字尾自動機中,每個節點代表的不同子串數量為

\[cnt_v = len(v) - len(link(v))

\]\[ans += len(v) - len(link(v)

\]然後如果某個節點在訪問之前就達到了k,則不需要繼續向上更新了,因為上面的節點也肯定大於等於k,並且在之前就被記錄了

ac**

#include #include #include #include using namespace std;

const int n = 250000;

int n, m, k, last = 0, co = 0;

long long ans = 0;

char ss[n + 5];

struct sam

sam[n * 2 + 5];

void inits(int o)

}void update(int o)

o = sam[o].fail; }}

void add(char c)

if (p == -1)

else

else

}} last = noww;

update(noww);

}int main()

for (int i = 1; i <= m; ++i)

else

}} return 0;

}

HDU4622 字尾自動機

題目 reincarnation 題意 給定乙個字串,然後再給定q個詢問,每個詢問是乙個區間 l,r 問在這個字串區間中有多少個不同的子串。字尾自動機模版題 include include include include using namespace std const int n 5010 st...

hdu4436 字尾自動機

題解 求多個字串能夠構成多少種數然後把這些數去重後加起來,字尾自動機有個性質就是路徑數就等於不同子串個數,然後怎麼把多個字串拼接呢,兩個字串中間加入乙個你不會用的字元,因為這樣可以保證我到時候路徑不會走這條 include include include include include includ...

HDU 4622(字尾自動機)

czh得意的向cry炫耀自己的英文水平,cry很不屑的扔給czh一篇文章,雖然czh看完之後頭暈眼花,但他還是決定猜測一下文章中單詞的意思,由於文章連空格都沒有,這大大增加了閱讀的難度,於是他決定退而求其次,只需要計算一下從第l個字元到第r個字元中有多少個可能的互不相同單詞 任意長度 1 任意組合的...