1 条题解
-
0
翻硬币:题解
思路
设当前状态与目标状态的汉明距离为 。一次操作在 个错误位置中翻转 个,并在其余 个正确位置中翻转 个。新距离为
对应的翻转集合数为
这个数只依赖 ,因此可以把 个具体状态压缩成 个距离状态。
做法
令 表示恰好进行 次操作后,结尾状态与目标状态距离为 的操作序列数。初始距离为 ,则 。
对每个 枚举
向 加上
每个大小为 的翻转集合按其与错误位置集合的交集大小 唯一分类,所以上述转移不重不漏。距离零只对应目标状态本身,答案为 。
组合数用 Pascal 递推预处理。模内乘积必须使用 64 位整数。
复杂度
时间复杂度为 ,空间复杂度为 。
部分分
- :枚举所有大小为 的翻转集合,再枚举长度恰为 的有序操作序列,复杂度 。
- :对全部 个具体硬币状态做位掩码 DP,复杂度 。
边界证书
- 时只有空操作序列,初态等于目标态答案为 1,否则为 0。
- 时状态不变。
- 时每次只能翻转全部硬币,答案只能为 0 或 1。
- 时当且仅当初末汉明距离为 ,答案为 1。
- 若初末汉明距离与 奇偶不同,则答案为 0。
- 1
信息
- ID
- 970
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者