洛谷P17589题解
分析
题意
给定长度为 的 01 串, 代表会员, 代表不是。
一共有 次翻转操作,每次操作指定位置 ,可以把 取反( 变 , 变 )。
我们可以任选其中一部分操作执行,目标是让最终序列里 的数量尽可能大,求这个最大值。
思路
同一个位置如果出现多次翻转操作,我们只关心这个位置有没有被选中翻转,翻转偶数次等于没翻,奇数次等于翻一次。所以对于每个位置:
- 如果这个位置在 次操作里出现过:我们可以自主选择翻或者不翻。
- 原数是 :翻一下变成 ,赚 个会员,肯定翻。
- 原数是 :翻一下变成 ,亏 个会员,肯定不翻。
- 如果这个位置在 次操作里没出现过:不能翻转,保持原样。
做法:
- 先统计原始串中 的总数。
- 标记所有在操作列表中出现过的下标。
- 遍历所有下标,如果下标被标记且原值是 ,说明我们可以把它翻成 ,答案加上这部分的数量。
代码
1 | |
洛谷P17589题解
https://lijingshu2014.github.io/2026/10/04/洛谷P17589题解/