1 条题解
-
0
题解
思路
各二进制位互不影响,因此可以分别计算每一位的合法二进制串数,再把 个结果相乘。
固定一位。若某个限制的该位为 ,区间内所有位置都被强制为 ;用差分数组标出这些位置。若该位为 ,区间 内必须至少出现一个 。
扫描到位置 时,用“最后一个零的位置”描述前缀。对所有右端点不超过 的零限制,最后一个零必须不小于相应左端点;只需维护这些左端点的最大值 。
做法
令 表示最后一个零恰在位置 的前缀方案数,并额外用 表示尚未出现零。若位置 未被强制为 ,把它设为零的方案数等于上一步所有仍合法方案之和,因此产生新的 。
处理完右端点为 的限制后,只保留 的状态。对 维护前缀和,就能在 时间求出保留状态之和。每一位线性扫描一次。
子任务 1 可枚举每一位的全部 个二进制串;子任务 2 可显式维护所有最后零位置并逐项求和。
复杂度
时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1231
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者