1 条题解

  • 0
    @ 2025-8-24 22:56:23

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar dspt
    その日まで 飛ばあげ 嵐がさわってゆくまで

    搬运于2025-08-24 22:56:23,当前版本为作者最后更新于2024-03-25 15:11:30,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    String Round Rank 6 纪念,场切了此题,写篇题解。

    题目涉及了 Border,显然可以跟 KMP 结合,此外就是一些分类讨论了。


     

    性质

    1. 长为 nn 的字符串 SS周期字符串等价于:存在长为 kk 的字符串 TT,满足:knk|nSSnk\frac nkTT 拼接而成的字符串等价。kk 被称为 SS 的一个周期
    2. 满足条件一的最小的 kk 被称为字符串 SS最小周期
    3. 若长为 nn 的字符串 SS 为周期字符串,记其最长真 border 的长为 mm,若 SS 存在周期 nmn-m,则 nmn-mSS 的最小周期。

    这些性质的证明可以见有关 KMP 的文章。

     

    分类讨论

    我们使用 KMP 求出 SS 的最长真 border TT,令 n=S,k=Tn=|S|,k=|T|,下面对 TT 进行分类讨论。

    1:TT 为空

    显然每次根本无法拓展,答案即为 (RL+1)n(R-L+1)n

    2:T|T|SS 的一个周期

    假设已用 KMP 求出最长真 border TT,判断 kk 是否为 SS 的周期是简单的。

    由于拓展的字符串需要是真 border,每次拓展的长度即为 Sk|S'|-k,拓展 ii 次后的 S|S'| 即为 2in(2i1)k2^in-(2^i-1)k,求和得 (2R+12L)(nk)+(rl+1)k(2^{R+1}-2^L)(n-k)+(r-l+1)k,快速幂计算即可。

    3:TT 不是周期字符串

    注意:此情况的前提是不满足前两个情况。

    显然每次拓展的长度均为 kk,拓展 LL 次后长度为 n+Lkn+LkRR 次后长度为 n+Rkn+Rk,求和得 (RL+1)n+(L+R)(RL+1)2k(R-L+1)n+\frac{(L+R)(R-L+1)}2k

    4:TT 是周期字符串

    注意:此情况的前提是不满足前两个情况。

    此情况的讨论应该是最容易漏掉的一种,TT 是否是周期字符串跟 SS 是否是周期字符串同理,容易判断。

    TT 的最小周期为 pp,且 S[1:p]S[1:p]SS 的前缀中重复了 aa 次,S[1:p]S[1:p]SS 的后缀中重复了 bb 次。

    例如:S=S=abababcabab,则 T=T=ababp=2p=2S[1:p]=S[1:p]=abSS 的前缀中重复了 a=3a=3 次,在 SS 的后缀中重复了 b=2b=2 次。

    这时的拓展情况应该是怎样的呢?不难发现每次向后拓展 min(a,b)\min(a,b)S[1:p]S[1:p]

    min\min 拆开助于思考:

    1. aba\geqslant b 时,每次拓展 bbS[1:p]S[1:p],同时 b2bb\leftarrow 2b,这样的拓展不超过 log2n\log_2n 次,可以暴力枚举。
    2. a<ba<b 时,每次拓展 aaS[1:p]S[1:p],由于 aa 这个数值不会变,所以容易计算出。

    具体地,计算第一部分暴力维护长度 SS' 和拓展次数 ii,若 i[L,R]i\in[L,R],将答案加上 SS'。第二部分仅在 R>iR>i 时有贡献(ii 是完成第一部分的拓展次数),由于每次拓展长度固定,可以用情况三的式子计算。

    容易发现第三种情况和这种情况类似,可以令 a=b=1,p=ka=b=1,p=k,合并到一起计算。

    • 1

    信息

    ID
    9688
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者