PS:下面的图截自skyh的PPT 水题再选讲,先Orz为敬。
弱周期引理
长度大于等于一半的串的匹配形成等差数列
长度大于等于|S|/2的border长度形成等差数列
回文串的回文后缀(border)长度可以表示成log个等差数列
本题做法
考虑这么做的正确性,(以下只讨论的情况,若小于显然构不成等差数列,直接继承是对的)。
我们继承,实际上是想继承 位置的值,而一定对应第 位置吗?
如果在 这个区间中出现了 对应的串,由引理1, 这个串在 中的匹配一定构成等差数列,而 在 的开头出现了,所以可以找到 的一个比 更小的周期,这与 是最大border矛盾,所以继承不会出错。
而引理2,3则保证了本题的复杂度为
顺带一提,为了方便转移,实际上是存的当前等差数列除了开头一项的贡献,即:
Code:咕咕咕