天天看點

回文自動機做題技巧

回文自動機做題技巧

① 靈活利用維護的各個資料:

節點x
len[x]表示該節點表示的字元串的最長長度
fail[x]指向的節點表示的字元串是節點x表示字元串的最長子回文串
cnt[x]在經過以下處理後表示在s中該節點所表示字元串在s中的出現次數
for(int i=sz;i>=0;++i)
  cnt[fail[i]]+=cnt[i];      

例題:​​P1659 [國家集訓隊]拉拉隊排練​​

② 将​

​fail​

​​數組與​

​len​

​​數組相結合,可以得出更多的資訊,​

​fail​

​數組指向的是該節點、對應子串的最長回文字尾,那麼利用這兩個資訊,就可以得出最長回文字尾與母串之間的長度關系。

例題:​​P4287 [SHOI2011]雙倍回文​​

③如果題目要求找到兩個連續的回文串,可以考慮建兩個回文自動機,一個順序一個逆序

例題:​​P4555 [國家集訓隊]最長雙回文串​​

④将 dp 與回文自動機相結合

例題:​​P4762 [CERC2014]Virus synthesis​​