ARC077F

https://www.luogu.com.cn/problem/AT_arc077_d

我们设 TiT_i 表示 fi(S)f^i(S) 的前一半,例如输入的 S=SSS=S'S',则 T0=ST_0=S'

B(T)B(T) 表示 TT 最长的不为自身的 border,则容易证明 Ti=Ti1Ti1B(Ti1)T_i = T_{i-1}T_{i-1}-B(T_{i-1}),这里减法表示去除一个后缀。

我们证明如下结论:

  • 如果 SS' 存在整周期,设其中最小的为 Xk=SX^k=S',因为如果存在整周期,则最小周期一定为最小整周期,于是 Ti=Xk+iT_i=X^{k+i}
  • 如果 SS' 不存在整周期,设 Ti1=SB(S)T_{i-1}=S'-B(S'),则有 1, Ti=Ti1Ti2, Ti2=B(Ti)\forall \ge 1,\ T_i = T_{i-1}T_{i-2},\ T_{i-2}=B(T_{i})

我们归纳证明第二种情况:

对于 i=1i=1 由定义可知第一部分成立。

i=ki=k 时第一部分成立时:

Ti2T_{i-2} 一定是 Ti=Ti2Ti3Ti2T_i=T_{i-2}T_{i-3}T_{i-2} 的一个 border,我们只需要证明它是最长的,否则设最长 border 为 CC,如果 C>Ti2Ti3|C|>|T_{i-2}T_{i-3}|,则 TiT_{i} 有长度小于 Ti2T_{i-2} 的周期,则它的前缀 Ti1=Ti2Ti3T_{i-1}=T_{i-2}T_{i-3} 有长度超过 Ti3T_{i-3} 的 border,与假设矛盾。

如果 Ti2<CTi2Ti3|T_{i-2}| \lt |C| \le |T_{i-2}T_{i-3}|,设 C=Ti2AC=T_{i-2}A,则 AATi3T_{i-3} 的前缀,所以它也是 Ti2T_{i-2} 的前缀,也就是 CC 的 border,而 Ti2T_{i-2} 也是 CC 的 border,因为 CA+CTi2=C|C|-|A|+|C|-|T_{i-2}| = |C|,所以由弱周期引理得 CC 的长度为 gcd(CTi2,CA)=gcd(A,Ti2)\gcd(|C|-|T_{i-2}|,|C|-|A|)=\gcd(|A|, |T_{i-2}|) 的前缀 DD 也为 CC 的周期,于是这也为 CC 的前缀 Ti2T_{i-2} 的整周期,设 Ti2=DjT_{i-2}=D^j,则 Ti1=Dj+1, Ti=D2j+1=Dj+2T_{i-1}=D^{j+1},\ T_{i}=D^{2j+1}=D^{j+2},所以 j=1j=1,这样 gcd(A,Ti2)=Ti2\gcd(|A|, |T_{i-2}|)=|T_{i-2}|,与假设矛盾,于是 i=ki={k} 时第二部分成立。

i=ki=k 时第二部分成立时:

Ti+1=TiTiB(Ti)=TiTiTi2=TiTi1T_{i+1}=T_{i}T_{i}-B(T_i)=T_iT_i-T_{i-2}=T_iT_{i-1},即 i=k+1i={k+1} 时第一部分成立。

i=1i=1 时可能会因为涉及到 T2T_{-2} 产生一些问题,不过可以利用 SS' 没有整周期的性质单独说明。

于是证明完毕。

所以如果 SS' 存在整周期可直接计算,否则答案可以拆成 O(logn)O(\log n)FiF_{i},其中 iiO(logn)O(\log n) 级别的和,直接暴力计算 FiF_{i} 里边每个字符的数量即可。