1 条题解

  • 0
    @ 2026-9-3 11:00:54

    统计超序列:题解

    思路

    从左到右贪心匹配固定序列 aa。若当前已经匹配了前 jj 项,则恰有一个值 aj+1a_{j+1} 会使状态前进,其余 k−1k-1 个值保持状态不变。因此答案只与 n,m,kn,m,k 有关,与 aa 的具体内容无关。

    总共有 kmk^m 个长度为 mm 的序列。一个序列不包含 aa,当且仅当贪心过程最终只匹配了 j<nj<n 项。固定恰好前进的 jj 个位置,有 (mj)\binom mj 种选择;其余 m−jm-j 个位置各有 k−1k-1 种不会前进的取值。因此坏序列数为

    ∑j=0n−1(mj)(k−1)m−j.\sum_{j=0}^{n-1}\binom mj(k-1)^{m-j}.

    所求答案为

    $$k^m-\sum_{j=0}^{n-1}\binom mj(k-1)^{m-j}\pmod{10^9+7}.$$

    因为 m<109+7m<10^9+7,可以用

    (mj+1)=(mj)m−jj+1\binom m{j+1}=\binom mj\frac{m-j}{j+1}

    在线性时间递推组合数。k=1k=1 时只有全一序列,答案直接为一。

    做法

    • 子任务 1:枚举全部 kmk^m 个候选序列并检查 aa 是否为其子序列。
    • 子任务 2:维护 0…n0\ldots n 个贪心匹配状态,逐位置转移,复杂度 O(nm)O(nm)。
    • 子任务 3:计算总数减去上述组合补集,复杂度 O(n+log⁡m)O(n+\log m)。

    正确性证明

    引理 1:对任意尚未完整匹配的状态 jj,一个新元素恰有一种取值使状态变为 j+1j+1,另有 k−1k-1 种取值使状态保持 jj。

    贪心下一项必须等于固定值 aj+1a_{j+1};值域内只有这个值相等,其余值均不相等。

    引理 2:最终恰好匹配 j<nj<n 项的序列数为 (mj)(k−1)m−j\binom mj(k-1)^{m-j}。

    选择发生状态前进的 jj 个位置后,这些位置的取值被唯一确定;由引理 1,其余位置各有 k−1k-1 种不前进的取值,且这些选择唯一对应一个最终状态为 jj 的序列。

    定理:算法输出包含 aa 作为子序列的长度为 mm 的序列数。

    所有 kmk^m 个序列分为完整匹配与最终匹配 j<nj<n 项两类。由引理 2,各个 jj 的坏序列集合互不相交,其和正是补集大小。总数减补集即为所求。

    复杂度

    每组测试时间复杂度 O(n+log⁡m)O(n+\log m),空间复杂度 O(1)O(1);所有测试合计满足 O(∑n+tlog⁡m)O(\sum n+ t\log m)。

    • 1

    信息

    ID
    1390
    时间
    3000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者