hiho 1445 字尾自動機二 重複旋律5

2021-08-29 10:28:45 字數 986 閱讀 1220

博主鏈結

給乙個字串,輸出這個串的不同子串數量

直接拿串跑字尾自動機就可以,然後每個狀態點子串的數量等於len[i]-len[link[i],把所有的狀態點的子串數量加起來就是不同子串數

#include

#include

#define maxc 28

using namespace std;

const

int maxn =

1e6+5;

const

int mod =

1e9+7;

typedef

long

long ll;

int len[maxn *2]

,//最長子串的長度(該節點字串數量=len[x]-len[link[x]])

link[maxn *2]

,//字尾鏈結(最短串前部減少乙個字元所到達的狀態)

cnt[maxn *2]

,//被字尾連線的數

nex[maxn *2]

[maxc]

,//狀態轉移(尾部加乙個字元的下乙個狀態)(圖)

idx,

//節點編號

last;

//最後節點

ll epos[maxn *2]

;// enpos數(該狀態子串數量)

void

iint()

void

extend

(int c)

} last = x;

//更新最後處理的節點

}void

getcnt()

}char str[maxn]

;int

main()

字尾自動機學習筆記2(hiho128周)

字尾自動機最出名的應該是其時空複雜度均為o length s 想要實現o length s 的構造,我們對於每個狀態不能儲存太多資料。例如substring st 肯定是沒法儲存下來了。對於狀態st我們只儲存如下資料 maxlen st st包含的最長子串的長度 minlen st st包含的最短字...

hiho一下 第128周 字尾自動機

求給定字串s不同子串的個數 即求該字串構成的字尾自動機裡面包含了多少個字尾 等價於求這個字尾自動機裡面的路徑的個數 每個字尾自動機節點所包含的字尾集合大小為len p len link p 其中len為該節點到根的長度,link為該節點的字尾鏈結 求和輸出即可 include include inc...

hihocoder 字尾自動機四 重複旋律6

題目 對於 k in 1,n 求出長度為 k 的子串出現次數最多的出現了多少次 我直到現在才理解字尾自動機上的子樹和是什麼意思 非常顯然的一點是 endpos link u endpos u 考慮到 link u 有多個兒子 於是還需要 endpos 的另外乙個性質 endpos u endpos ...