首先,回文自動機就是回文樹。
不愧是\(\texttt\),在\(csp\)模擬賽裡面考\(pam\)
(然後全場就我切了)
求乙個由小寫字母'a'-'z'構成的串的本質不同的回文子串數量。
首先考慮把每乙個子串列舉出來,然後判斷是不是回文串再把它\(hash\)進\(map\)或者是\(hash-table\)裡面。複雜度\(\theta(n^3)\)
想一想判斷是不是回文串可以通過正反兩遍\(hash\)得到。複雜度\(\theta(n^2)\)。
考慮manacher的過程是不是可以求出所有的回文串,預處理\(hash\)值然後用\(map\)或者\(hash-table\)可以做到\(\theta(n)\)或\(\theta(nlogn)\)
這就是我們要說的演算法——回文自動機。
形態
我們很容易知道,回文串有兩種,一種長度是奇數,一種長度是偶數構造而在回文樹上走,我們肯定不是一次只在後面新增乙個字元
顯然是在前後各新增乙個字元
所以我們不難得出一點,如果串可以變成另外乙個回文串
那麼它的長度一定加上了乙個偶數
所以在回文樹上,為了區分這兩種不同的回文串
所以回文樹相當於乙個森林
有兩棵樹,一棵的代表長度為奇數的回文串,另一棵代表長度為偶數的回文串
構造的話考慮增量構造。加入乙個位置\(r\),然後找最長回文字尾即可。
考慮乙個點不斷從自己的祖宗轉移即可。
int tot=1,last;
char s[n];
struct nodet[n<<1];
void extend(int c,int n)
last=t[p].son[c];
}
題解戳這裡
題解戳這裡
回文樹總結
寫馬拉車還不如寫回文樹。by 陳菊開 原 請轉2017年集訓隊 回文樹及其應用 by翁文濤 我感覺回文樹 回文自動機相較於字尾自動機還是要好理解一點的 像我這種菜雞到現在還不是很懂sam 回文樹,顧名思義,就是要把乙個串的所有回文子串丟到一棵樹上。那要向sam一樣記錄個什麼鬼 endpos 啥的嗎?...
回文樹(自動機) 練習和總結
回文樹是一種強大的回文字串處理演算法,他的構造過程實際上和kmp多少有些相似,這裡講的很是仔細。下面摘錄幾個例題。ural 1960 palindromes and super abilities 每次加乙個新節點,說明了有乙個新的回文串產生。這個感覺真的很重要啊 我們在自動機裡記錄一下就好 ura...
回文樹 模板
類似ac自動機,樹裡面每個節點代表主串的乙個回文子串,且每個回文子串都不同 主要功能 1.求串s字首0 i內本質不同回文串的個數 兩個串長度不同或者長度相同且至少有乙個字元不同便是本質不同 2.求串s內每乙個本質不同回文串出現的次數 3.求串s內回文串的個數 4.求以下標i結尾的回文串的個數 con...