Codeforces932G Palindrome Partition【迴文樹DP(附border的若干證明)】

在這裏插入圖片描述
洛谷鏈接

PS:下面的圖截自skyh的PPT 水題再選講,先Orz爲敬。

弱週期引理

在這裏插入圖片描述

長度大於等於一半的串的匹配形成等差數列

在這裏插入圖片描述

長度大於等於|S|/2的border長度形成等差數列

在這裏插入圖片描述

迴文串的迴文後綴(border)長度可以表示成log個等差數列

在這裏插入圖片描述

本題做法

在這裏插入圖片描述
考慮這麼做的正確性,(以下只討論len[fail[x]]len[x]/2len[fail[x]]\ge len[x]/2的情況,若小於1/21/2顯然構不成等差數列,直接繼承是對的)。
我們繼承g[fail[x]]g[fail[x]],實際上是想繼承 idi-d 位置的值,而fail[x]fail[x]一定對應第 idi-d 位置嗎?
如果在 (id,i)(i-d,i) 這個區間中出現了 fail[x]fail[x] 對應的串,由引理1,fail[x]fail[x] 這個串在 xx 中的匹配一定構成等差數列,而 fail[x]fail[x]xx 的開頭出現了,所以可以找到 xx 的一個比 len[x]len[fail[x]]len[x]-len[fail[x]] 更小的週期,這與 fail[x]fail[x] 是最大border矛盾,所以繼承不會出錯。

而引理2,3則保證了本題的複雜度爲O(nlogn)O(n\log n)

順帶一提,爲了方便轉移,g[x]g[x]實際上是存的當前等差數列除了開頭一項的貢獻,即:
在這裏插入圖片描述

Code:咕咕咕

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章