51Nod 1469 淋漓盡致子串 字尾自動機

2022-05-20 05:13:40 字數 676 閱讀 3696

對於原串構造字尾自動機

我們只考慮\(|endpos|>1\)的狀態

發現對於乙個狀態,只有其中最長的子串會產生貢獻,否則會在\(p_i-1\)出產生衝突

對於最長串的\(p_i-1\)位置,如果\(link/parent\)樹上的乙個兒子的\(|endpos|>1\),那麼意味著存在衝突(因為兒子就是在串前面新增一些字元得到的)

對於\(p_i+len\)的情況,實際上就是\(j\in endpos,j+1\)不能產生衝突,在\(link,parent\)樹上進行子樹統計即可

#includeusing namespace std;

#define reg register

typedef long long ll;

#define rep(i,a,b) for(int i=a,i##end=b;i<=i##end;++i)

#define drep(i,a,b) for(int i=a,i##end=b;i>=i##end;--i)

#define pb push_back

template inline void cmin(t &a,t b)

template inline void cmax(t &a,t b)

if(u && sz[u]>1)

}int main()

文文殿下 51nod1469 淋漓盡致子串

sam的經典應用 乙個狀態的size 1絕對不合法。乙個狀態在parent樹上有乙個size 1的後繼絕對不合法 前面可以再補字元 乙個狀態可以轉移到size 1的節點絕對不合法,因為可以在後面補字元。include include includetypedef long long ll const...

51nod1733 提取子串

題目鏈結 先用kmp求出t能出現在s的哪些位置。我們維護這樣的三個dp方程 dp1 i 表示 最後乙個區間結尾r在i的方案數。dp2 i 表示 最後乙個區間結尾r在 0 i 的方案數。dp3 i 表示 最後乙個區間開頭l在 0 i 的方案數。轉移即可,dp2 n 即為答案。複雜度o n o n o ...

51nod 1088 最長回文子串

回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000 output 輸出最長回文子串的長度l。input示例 daabaacoutput示例 5 解法一 暴力列舉所有串 若當前列舉串...