1 条题解

  • 0
    @ 2025-8-24 22:53:26

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 0xyz
    assign3

    搬运于2025-08-24 22:53:26,当前版本为作者最后更新于2023-12-23 18:36:26,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    赛后写出,比 std 少一个 log\log,不需要任何数据结构。

    不难想到区间 DP,令 fi,jf_{i,j} 表示将区间 [i,j][i,j] 完全折好最少要折多少次,以及在这一前提下最小的不对称度是多少。那么我们枚举在哪个点 kk 折叠,并转移即可。能在点 kk 折叠要求 kk 左右边能完全匹配的位数 pkmin(ki,jk)p_k\ge\min(k-i,j-k)。这个 pkp_k 可以 O(n2)O(n^2) 预处理。总时间复杂度 O(n3)O(n^3)代码

    考虑优化,注意到对于区间的左半边是一类转移,区间的右半边是一类转移。对于剩余串 aabb,如果 bbaa 的子串,那么 bb 的最优折叠一定优于 aa 的最优折叠。这启示我们,对于区间 [i,j][i,j] 左半边的所有 kk,取最右边那个,设为 ss;右半边的,取最左边那个,设为 ttfi,jf_{i,j} 只需要由 fs+1,jf_{s+1,j}fi,t1f_{i,t-1} 转移而来,这样就可以保证每次操作都是最优的。代码

    注意到 ss 的实质是前缀 [1,i+j2][1,\lfloor\frac{i+j}{2}\rfloor] 里满足 ikpki\ge k-p_k 的最大 kk。状态 (i+j2,i)(\lfloor\frac{i+j}{2}\rfloor,i) 只有 O(n2)O(n^2) 个,所以我们可以通过枚举 O(n2)O(n^2) 预处理出所有 ss。对 tt 的处理同理。总时间复杂度 O(n2)O(n^2),空间复杂度 O(n2)O(n^2),跑得很快。代码

    • 1

    信息

    ID
    9580
    时间
    2500ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者