1 条题解

  • 0
    @ 2025-8-24 22:36:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar panyf
    **

    搬运于2025-08-24 22:36:48,当前版本为作者最后更新于2022-03-11 14:53:59,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    考虑从前到后 dp。当前 dp 了长度为 ii 的前缀,记 fu1,u2,u3,v0,v1,v2,v3f_{u_1,u_2,u_3,v_0,v_1,v_2,v_3} 表示第 i2i-2 位为 u1u_1,第 i1i-1 位为 u2u_2,第 ii 位为 u3u_3,长度为 i3i-3 的前缀能否匹配(v0=1v_0=1 表示能匹配,v0=0v_0=0 表示不能),i2i-2 能否匹配,i1i-1 能否匹配,ii 能否匹配。转移时枚举第 i+1i+1 位的值,判断 [i2,i+1],[i,i+1],[i+1,i+1][i-2,i+1],[i,i+1],[i+1,i+1] 这三个区间能否匹配。时间复杂度 O(n)O(n)

    算一下这个做法的常数,状态数 24×932^4\times 9^3,转移数 99。显然 TLE。

    考虑优化。首先容易发现若 v0=0v_0=0,那么 u1u_1 就没用了,就不用记录了。若 v0=v1=0v_0=v_1=0,那么 u2u_2 也就没用了。若 v0=v1=v2=0v_0=v_1=v_2=0,那么 u3u_3 也就没用了,若 v0=v1=v2=v3=0v_0=v_1=v_2=v_3=0,那么这个状态不合法。但是 v0=1v_0=1 的时候还是要记 u1,u2,u3u_1,u_2,u_3,状态数只减少了不到一半。

    v0=1v_0=1,但是 u1,u2,u3u_1,u_2,u_3 再加上任何一个数,都不能和 [i2,i+1][i-2,i+1] 匹配上,那么可以把 v0v_0 改成 00。或者如果 [i2,i+1][i-2,i+1] 的数不在一个正方形内,也可以把 v0v_0 改成 00。同理 v1,v2v_1,v_2 也可以这样做。

    加上这两个优化以后,再分析一下状态数。若 v0=1v_0=1,那么 u1,u2,u3u_1,u_2,u_3 一定是从数字串的区间 [i2,i+1][i-2,i+1] 中选出三个数,有 2424 种方案,并且 v1v_1 一定等于 00(因为),v2,v3v_2,v_3 不确定,有 4×24=964\times 24=96 种方案。若 v0=0,v1=1v_0=0,v_1=1,则 u2,u3u_2,u_3 一定是 [i1,i+2][i-1,i+2] 中选出的两个数,有 1212 种方案,v2,v3v_2,v_3 不确定,有 4×12=484\times 12=48 种方案。若 v0=v1=0,v2=1v_0=v_1=0,v_2=1,有 2×4=82\times 4=8 种方案。若 v0=v1=v2=0,v3=1v_0=v_1=v_2=0,v_3=1,有 11 种方案。总状态数就是 96+48+8+1=15396+48+8+1=153。实际上跑不满,按照官方题解的说法数据中状态不超过 5050。可以写一个哈希表压缩状态。

    $10\times 100000\times 153\times 9\approx 1.4\times 10^9$,然后时限 4s4s,就过了。

    • 1

    信息

    ID
    7528
    时间
    4000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者