ARC171F Both Reversible
首先根据 \(rev(A)+B\) 回文,有 \(rev(B)+A\) 回文,又因为 \(A+rev(B)\) 回文,令 \(s=A+rev(B)\),相当于实际上是将 \(s\) 拆成 \(a+b\) 的形式后再变成 \(b+a\),回文的性质没有被破坏。
令 \(F(s)\) 为最小的 \(k\) 满足存在 \(t^k=s\),由于 \(s\) 回文,则 \(t\) 也回文,不难发现如果 \(k\geqslant 2\),则我们只要将 \(s\) 拆成 \(t^{k-1}\) 与 \(t\),则 \(t^{k-1}+t\) 与 \(t+t^{k-1}\) 均为回文。再将 \(t\) 翻转回来之后因为其回文所以不变,所以可以得到所有 \(F(s)\geqslant 2\) 的串都是合法的。
直接数 \(F(s)\geqslant 2\) 的串可以发现 \(n=8\) 时就会出现问题,有 \(\text{ababbaab}\) 是一个合法的串,由于 \(\text{ab|abbaab}\) 是一个合法的划分方案。观察可以发现如果 \(s=a+rev(a)+a+rev(a)\),则 \(a+a+rev(a)+a\) 其实是合法的,这个变换相当于令 \(s=t^k\),当 \(|t|\) 为偶数时令 \(t=a+rev(a)\),则可以令 \(k=x+y+1\),则 \((a+rev(a))^x+a^2+(rev(a)+a)^y\) 是一个合法的串,仔细想想发现似乎不存在更多的合法串了。
接下来证明这一点,令 \(n=|s|,d=|A|\),则有对于 \(0\leqslant i\leqslant n-1\) 有 \(i\) 与 \(n-1-i\) 与 \((n-1-i+2d)\mod n\) 属于同一个等价类,则 \(\frac{n}{gcd(2d,n)}|k\),则 \(\frac{n}{k}|2d\),那么 \(d\) 一定为 \(\frac{n}{2k}\) 的倍数,即只能在串的衔接位置和串中点位置断开重连。
\(F(s)\geqslant 2\) 的串是容易统计的,令 \(f_{i}\) 为 \(F(s)=i\) 的串个数,由于 \(\sum_{j|i}f_{j}\) 是好计算的,所以容斥一下即可得到 \(f\)。
关键在于 \(F(s)=1\) 的串如何避免算重,首先其可以写为 \((a+rev(a))^x+a^2+(rev(a)+a)^y\) 的形式,当 \(a=rev(a)\) 时 \(F(s)\geqslant 2\) 这一部分可以简单容斥掉。如果只容斥这个会发现当 \(n=12\) 时串 \(\text{abbaababbaab}\) 会被算两次,原因是其既是 \((abbaab)^2\) 又是 \(ab+ba+(ab)^2+ba+ab\),但注意到此时它们的 \(|(a+rev(a))^x+a|\) 是相同的,即中间划分开来的位置。每次我们都在 \(k\) 尽量大的地方统计,要求 \(a\) 不可以拆成更小的结构。令 \(dp_{i,j}\) 表示 \(k=i,|(a+rev(a))^x+a|=j\) 的一个方案数,每次当 \(a=(b+rev(b))^z+b\),取 \(b\) 才是 \(k\) 最大的方案,容斥一下即可。
由于有 \(k|n\),则复杂度为 \(O(nd(n))\)。
本文来自博客园,作者:zhouhuanyi,转载请注明原文链接:https://www.cnblogs.com/zhouhuanyi/p/18008236