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:咕咕咕

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