1 条题解
-
0
1. 操作转化
我们有一个长度为 的 01 串 。
一次操作:选择一个长度为 的子区间 ,将其全部取反(0 变 1,1 变 0)。
取反就是异或 1。
2. 差分数组
定义差分数组:
其中 。
那么 也是 0/1。
初始时,,(因为 )。
3. 操作对差分数组的影响
考虑对区间 取反:
- 对于 :从 变成 ,而 不变,所以 变成 $\neg a_l \oplus a_{l-1} = \neg (a_l \oplus a_{l-1}) = \neg d_l$。即 取反。
- 对于 :它变成 ,而 不变,所以 变成 $a_{l+k} \oplus \neg a_{l+k-1} = \neg (a_{l+k} \oplus a_{l+k-1}) = \neg d_{l+k}$。即 取反。
- 对于中间的 : 和 同时取反,异或值不变,所以这些 不变。
结论:一次操作只会翻转 和 这两个位置的值(异或 1)。
4. 目标状态
最终我们要让区间 内的 全为 0。
最终 对所有 ,且 (区间外不变),(区间外不变)。
那么差分数组最终状态:
- 对于 ,
所以目标:把 全部变成 0。
5. 问题转化
现在问题变成:
- 我们有一个差分数组 。
- 一次操作:选择 ,翻转 和 。
- 给定区间 ,我们要翻转 这些位置中的若干个(初始为 1 的位置),使得它们全为 0。
- 操作时 和 必须在 范围内,但这里 可以超出 吗?注意操作区间是原序列的 ,可能部分在 外,但题目允许选择区间内的任意子区间,所以 必须在 内?不对,仔细看:题目说“选择这个区间的一个长度为 k 的子区间”,所以 必须在 内。这意味着我们只能翻转 和 其中 。
6. 模 k 分组
因为一次操作翻转的两个位置下标差 ,所以我们可以按位置模 的余数分组。
设余数 ,但这里下标从 1 开始,我们考虑 的下标 ,令 。
那么一次操作会挑选同一组内的两个位置(相差 )进行翻转。
7. 可行性条件
对于区间 ,我们要翻转的 位置是 中初始为 1 的那些位置。
这些位置按模 分组后,每组内 1 的个数必须是偶数,因为一次操作翻转组内的两个 1(或引入两个 1,但最终要消掉)。
所以:
可行性条件:对于每个余数 ,在 中,属于该余数类且值为 1 的位置个数必须是偶数。
8. 最少操作次数
对于某一组(余数 ),设该组在 范围内有 个 1( 为偶数)。
我们可以在组内将这些 1 两两配对,每对 可以通过从 开始,长度为 的操作链一路翻转到 的位置,这需要 次操作吗?不对,更准确地说:
一次操作 翻转两个位置,如果它们相邻(在组内相邻 1),则一次操作消掉。如果它们不相邻,则需要多次操作传递 1:例如位置 和 操作后,1 移动到 ,再和 操作,1 移动到 ,如此传递到目标位置。其实等价于在组内位置序列上,相邻两个 1 的距离(以 k 为单位)就是操作次数。
结论:对于一组内位置 (在 内),最优配对是 ,操作次数 = 。
因为每次操作只能移动 1 到 位置,所以两个 1 的位置差必须是 的倍数,并且差除以 就是所需操作次数。
9. 高效计算
我们需要对每个询问 :
- 检查可行性:对每个余数 ,在 中该组 1 的个数为偶数。
- 若可行,计算 $\sum_{r=0}^{k-1} \sum_{j=1}^{t_r} \frac{p_{2j} - p_{2j-1}}{k}$,其中 是该组配对数。
10. 预处理与查询
我们可以预处理:
- 对每个余数 ,记录该组所有 1 的位置列表 。
- 对每个余数 ,预处理前缀和,以便快速计算区间内 1 的个数(判断可行性)以及配对的代价。
具体地,对于一组内位置列表 ,我们定义:
- = 前 个位置的 1 的个数(其实就是 i)
- = 前 个位置中,奇数位置减去偶数位置的位置和(用于快速计算配对距离和)。
实际上,配对距离和 = (所有偶数下标位置和)−(所有奇数下标位置和)。
所以我们可以预处理每个组的前缀奇偶位置和,然后 计算任意区间内的配对代价。
11. 查询过程
对询问 ,考虑 :
对每个余数 ,用二分在 中找到在 内的所有 1 的位置,检查个数是否为偶数。
若全为偶数,则答案 = $\sum_{r=0}^{k-1} \left( \frac{\text{evenSum} - \text{oddSum}}{k} \right)$,其中 evenSum 是这些位置中偶数索引(在选中子序列中的索引)的和,oddSum 是奇数索引的和。
注意索引是在选中子序列中从 1 开始编号的。
12. 时间复杂度
- 预处理
- 每组查询 ,因为对 k 个组分别二分。
- 总复杂度 ,在 小的时候可行,但 可能很大(最大 ),需要优化。
实际上, 很大时,很多组在区间内没有 1,可以跳过。我们可以只处理在区间内有 1 的组。
13. 实现细节
- 注意 也要考虑,它对应 和 的差分。
- 判断可行性时,如果 ,则 ;如果 ,则 。
- 配对时,在 内的 1 的位置按升序配对。
- 1
信息
- ID
- 4800
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者