1 条题解

  • 0
    @ 2026-9-9 9:00:04

    题解

    思路

    从左到右决定 AA。

    做法

    用一个集合 SS 表示下一项当前允许选择的数:起初所有 11 到 MM 都可选。若本次选择 a∈Sa\in S,那么在出现 XaX_a 以前不能再次选 aa,所以先从 SS 删除 aa;另一方面,本次出现的 aa 已满足所有 Xb=aX_b=a 的等待条件,因此把这些 bb 全部重新加入 SS。只要求相邻两次出现同一个 bb 之间含有 XbX_b 就足以保证任意两次出现之间也满足条件,故这个状态完整描述了前缀。

    用二进制掩码表示 SS,预处理每个值 aa 对应的集合 {b∣Xb=a}\{b\mid X_b=a\}。令 dp[mask] 为当前前缀形成该允许集合的方案数,枚举 mask 中每个可选的 aa,转移到 (mask 去掉 a) 并上 preimage[a]。完成 NN 次选择后把所有状态的方案数相加。

    复杂度

    时间复杂度为 O(NM2M)O(NM2^M),空间复杂度为 O(2M)O(2^M)。

    • 1

    信息

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