1 条题解

  • 0
    @ 2026-8-22 11:40:14

    翻硬币:题解

    思路

    设当前状态与目标状态的汉明距离为 jj。一次操作在 jj 个错误位置中翻转 xx 个,并在其余 N−jN-j 个正确位置中翻转 M−xM-x 个。新距离为

    j−x+(M−x)=j+M−2x,j-x+(M-x)=j+M-2x,

    对应的翻转集合数为

    (jx)(N−jM−x).\binom{j}{x}\binom{N-j}{M-x}.

    这个数只依赖 jj,因此可以把 2N2^N 个具体状态压缩成 N+1N+1 个距离状态。

    做法

    令 ft[j]f_t[j] 表示恰好进行 tt 次操作后,结尾状态与目标状态距离为 jj 的操作序列数。初始距离为 dd,则 f0[d]=1f_0[d]=1。

    对每个 jj 枚举

    max⁡(0,M−(N−j))≤x≤min⁡(M,j),\max(0,M-(N-j))\le x\le\min(M,j),

    向 j+M−2xj+M-2x 加上

    ft[j](jx)(N−jM−x).f_t[j]\binom{j}{x}\binom{N-j}{M-x}.

    每个大小为 MM 的翻转集合按其与错误位置集合的交集大小 xx 唯一分类,所以上述转移不重不漏。距离零只对应目标状态本身,答案为 fK[0]f_K[0]。

    组合数用 Pascal 递推预处理。模内乘积必须使用 64 位整数。

    复杂度

    时间复杂度为 O(N2+KNM)O(N^2+KNM),空间复杂度为 O(N2+N)O(N^2+N)。

    部分分

    • N≤4,K≤5N\le4,K\le5:枚举所有大小为 MM 的翻转集合,再枚举长度恰为 KK 的有序操作序列,复杂度 O((NM)KN)O(\binom NM^K N)。
    • N≤10N\le10:对全部 2N2^N 个具体硬币状态做位掩码 DP,复杂度 O(K2N(NM))O(K2^N\binom NM)。

    边界证书

    • K=0K=0 时只有空操作序列,初态等于目标态答案为 1,否则为 0。
    • M=0M=0 时状态不变。
    • M=NM=N 时每次只能翻转全部硬币,答案只能为 0 或 1。
    • K=1K=1 时当且仅当初末汉明距离为 MM,答案为 1。
    • 若初末汉明距离与 KMKM 奇偶不同,则答案为 0。
    • 1

    信息

    ID
    970
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者