回文自動機學習筆記

2022-06-02 06:42:08 字數 1134 閱讀 7403

前言:

前置知識:

初識回文自動機:

變數定義:

如圖所示加深理解:

如圖所示,他每個節點所代表的回文串分別是(從\(2\)到\(5\)):\(aa,a,b,aba\)。(這裡這張圖只是增加感性認識,真實構建可能不會出現此形態的自動機。)

因為\(1\)號樹是存長度為奇數的回文串,每次操作又要\(len+=2\),為了減少特判,相信這裡大家也能明白這裡為什麼\(len(1)\)的初值為\(-1\)。

\(fail\)指標:

構建回文自動機:

否則就跳轉到\(fail(last)\),進行上一步的匹配判斷直到走到\(1\)號結點。(回顧一下\(fail\)指標:指向當前節點所表示的回文串的最長回文字尾(不包括自己))

在字典樹中插入該節點。

構建該節點的\(fail\)指標。

2:插入\(b\)

3:插入\(b\)

4:插入\(a\)。

當然此時可以在插入乙個\(a\)試試,會發現需要連\(0-6-a\),\(len(6)=2\),\(fail(6)==2\),\(last=6\)。

成圖:更新\(last\)為當前插入的節點。

強烈建議模擬一遍加深印象。

模板題:洛谷_5496

#includeusing namespace std;

const int maxn = 5e5 + 10;

struct pam_trie

;struct pam

//讀入字串

void read()

//尋找當前

int get_fail(int las, int i)

//新建節點

void ins(int i)

//更新last(上一次插入的節點)

last = b[p].ch[s[i]];

}//這題題目要求第i個位置答案是k,第i+1個位置代表的

//字元就變成了(c-97+k) % 26 + 97

void solve()

}}p;int main()

回文自動機(PAM) 學習筆記

無。強行說和kmp有關也是可以的 1.乙個長度為 n 的字串最多有 n 個本質不同的回文子串。2.對於乙個字串 s,如果在其之後新插入乙個字元,那麼最多產生一種新的回文子串。證明 假設加入這個字元之後得到的最長回文字尾為 t,那麼對於長度小於 t 的任何回文字尾,它們必然在更前面的位置出現過。如圖所...

回文樹(回文自動機) 筆記

回文樹詳解1 what is palindromic auto machine?回文自動機,又叫回文樹,是由俄羅斯人 mikhailrubinchik於2014年夏發明的 這是一種比較新的資料結構,在原文中已有詳細介紹與 實現。回文樹其實不是嚴格的樹形結構,因為它有是兩棵樹,分別是偶數長度的回文樹和...

回文自動機

回文自動機,又叫回文樹,是由俄羅斯人 mikhailrubinchik於2014年夏發明的 這是一種比較新的資料結構,在原文中已有詳細介紹與 實現。回文樹其實不是嚴格的樹形結構,因為它有是兩棵樹,分別是偶數長度的回文樹和奇數長度的回文樹,樹中每個節點代表乙個回文串。為了方便,第一棵樹的根是乙個長度為...