1 条题解

  • 0
    @ 2026-9-3 10:52:09

    题解

    思路

    对“不能最终全亮”的串按最外层阻塞结构做唯一分解。记 fif_i 为长度 ii 的计分串数,辅助数组 gig_i 统计可接在阻塞结构右侧的前缀,hi=∑j=1i−1fjfi−jh_i=\sum_{j=1}^{i-1}f_jf_{i-j} 表示两个计分块的拼接数。可以得到

    gi=gi−1+∑3j<igi−3j−1fj,g_i=g_{i-1}+\sum_{3j<i}g_{i-3j-1}f_j, fi=2max⁡(0,i−2)−∑2j<ihjgi−2j−1.f_i=2^{\max(0,i-2)}-\sum_{2j<i}h_jg_{i-2j-1}.

    所有运算直接对给定的任意模数进行,不使用逆元。

    做法

    子任务 1

    枚举全部 2n2^n 个串,反复应用任意当前合法的传播操作直到闭包稳定,统计能变成全 11 的串。复杂度 O(2nn3)O(2^n n^3)。

    子任务 2

    直接使用分解递推,但每次需要 hjh_j 时重新枚举断点计算卷积,复杂度 O(n3)O(n^3)、空间 O(n)O(n)。

    子任务 3

    按长度递增时预先缓存每个 hih_i,每对 (j,i−j)(j,i-j) 只贡献一次。于是所有 g,f,hg,f,h 转移总计 O(n2)O(n^2),空间 O(n)O(n)。

    复杂度

    三层算法时间复杂度分别为 O(2nn3)O(2^n n^3)、O(n3)O(n^3)、O(n2)O(n^2),空间复杂度分别为 O(1)O(1)、O(n)O(n)、O(n)O(n)。

    正确性

    逐串枚举按定义求出传播闭包。分解 DP 将每个非计分串按第一个无法跨越的阻塞结构唯一归入一个 hjgi−2j−1h_jg_{i-2j-1} 项,因此用全部首尾为 11 的候选数减去这些互不重叠的坏串,恰得 fif_i。缓存 hih_i 只复用同一卷积值,不改变递推。

    • 1

    信息

    ID
    1340
    时间
    2000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者