1 条题解

  • 0
    @ 2025-8-24 22:30:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Mivik
    AFO

    搬运于2025-08-24 22:30:42,当前版本为作者最后更新于2021-04-15 23:52:54,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    如果没有 border,答案是 nn

    如果有整周期,则答案是 p+2K(np)|p|+2^K(n-|p|),其中 pp 是最小整周期。

    如果 border 大于 n2\dfrac n2,即周期小于 n2\dfrac n2。令 s=pkpret(p)s=p^k\cdot pre_t(p),其中 pp 是最小周期,pret(p)pre_t(p)pp 的长为 tt 的前缀(0<t<p0<t<|p|)。实际上这样的字符串进行一次操作之后的最长 border 仍为 npn-p,证明如下:

    假设进行一次操作后的字符串有一个长度小于 nn 的周期 qq,首先我们知道 pqp\nmid q,因为如果 qqpp 的倍数的话就间接指出 p=pret(p)pp^\infty=pre_t(p)\cdot p^\infty,则 ttpp 的整周期,pp 就不是原串的最小周期了。于是我们知道 q>n2q>\dfrac n2,因为 pqp\nmid q,如果 qn2q\le \dfrac n2,则会必然会有一个小于 pp 的周期(弱周期引理)。不难发现由于 pn2|p|\le\dfrac n2,于是 k>1k>1,那么根据周期的定义,我们知道 q=sufnq(s)pre2qn(p)q=suf_{n-|q|}(s)\cdot pre_{2|q|-n}(p^\infty)(把 qq 重复两次和串匹配),于是我们得知 (qmodp)(|q|\bmod|p|)(p(qmodp))(|p|-(|q|\bmod|p|)) 同为 pp 的周期,进而通过周期引理我们知道 pp 必然有一个长为 g=(qmodp,p)g=(|q|\bmod|p|,|p|) 的周期,而由于 g<pg<|p|g(p)g\mid(|p|),我们知道 ggpp 的一个整周期,则 gg 也是原串的一个周期且长度小于 pp,形成矛盾。于是我们得证。

    这样的话,一个周期小于 n2\dfrac n2 的字符串经过一次操作之后 border 仍为 npn-p,那么此时的最短周期就为 n+(np)(np)=n>n+(np)2n+(n-p)-(n-p)=n>\dfrac{n+(n-p)}2。于是我们现在只需要讨论周期大于 n2\dfrac n2 的情况。

    对于这种情况,即 k=1k=1,我们有一个结论。令 BBss 的最长 border,llBB 的最小整周期,令 B=ljB=l^j,然后找到最大的 ii 使得 preil(s)=lipre_{i|l|}(s)=l^i。首先 il<n+li|l|<n+|l|,因为反之的话,首先我们知道 ln|l|\nmid nss 有一个整周期的情况我们已经在题解最开始讨论过了),于是我们知道 ilnli|l|-n\ge |l|,不妨令 nq(modl)n\equiv q\pmod{|l|},则 suflq(l)suf_{|l|-q}(l) 既是 ll 的周期也是 ll 的 border,于是 ll 会有一个更小的整周期,形成矛盾。

    有个结论:我们进行第 bb 次操作后的最长 border 长度为 min{2bj,i}l\min\{2^bj,i\}|l|。考虑归纳证明。b=0b=0 时显然,我们考虑 b>0b>0。在进行这一操作前的字符串,假令其长度为 nn,我们知道最长 border 长度是 min{2b1j,i}l\min\{2^{b-1}j,i\}|l| 的,那么显然进行这一操作后的字符串会有一个长为 min{2bj,i}l\min\{2^bj,i\}|l| 的 border,我们只需要证明不存在一个比其更长的 border。

    • i2bji\ge2^bj:则如果存在 border>2bjl|\text{border}|>2^bj|l|,则存在 周期<n+2b1jl2bjl=n2b1jl|\text{周期}|<n+2^{b-1}j|l|-2^bj|l|=n-2^{b-1}j|l|,而我们知道进行操作前的字符串 周期=n2b1jl\text{周期}=n-2^{b-1}j|l|,形成矛盾。
    • i<2bji<2^bj:我们考虑把这个 border 和 ss 的前缀进行匹配。
      • border=lk|\text{border}|=l^k:这意味着 lk=lis[il,kl]l^k=l^i\cdot s_{[i|l|,k|l|]}。由于 k>ik>i,这显然不可能,因为这意味着 pre(i+1)l(s)=lipre_{(i+1)|l|}(s)=l^i,则我们的 ii 是应该更大的,产生矛盾。
      • borderlk|\text{border}|\ne l^k:假令 borderq(modl)|\text{border}|\equiv q\pmod lborder=d|\text{border}|=d,则我们得到 $l^i\cdot s_{[i|l|,d]}=suf_q(l)\cdot l^{\left\lfloor\dfrac d{|l|}\right\rfloor}$。由于 dli\dfrac{d}{|l|}\ge i,我们知道 l=sufq(l)prelq(l)l=suf_q(l)\cdot pre_{|l|-q}(l),即 qq 既是 ll 的周期也是 ll 的 border,则 ll 有一个更小的整周期,产生矛盾。

    于是我们只需要找到 i,ji,j 后直接模拟即可,时间复杂度 O(n+logK)O(n+\log K)ss 有整周期时的快速幂)。

    mivik.h / 代码

    • 1

    信息

    ID
    6696
    时间
    1000ms
    内存
    64MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者