NOI2025 D2T1 题解
前言
唉
思路
题面不太会说人话,先把题面的操作转化成人话。
如果把整个 01 串划分成值相同的连续段,由于经过一次变换后 只可能变成自己或 ,所以只有每个连续段的左端点可能发生变化。设 为某个连续段的左端点,分类讨论 的取值,发现只有 两种情况会导致 在一次变换后被翻转。
发现这个规律实际分别等价于,对于每个单个的 ,在一次变换后会变成两个 ;对于每段非单个()的 ,在一次变换后会往右扩展一位。
得到人话后我们考虑整个扩展过程需要的最小时间(即题面里的 )怎么求。模拟一下前面的过程,考虑最左边的一段长度 的 ,它往右扩展一段时间后会覆盖右边那段 产生一个单个的 ,剩下的过程就是它推着一个 往右走,直到这个 被推到 ,最后后缀全都变成 为止。设这一段 的右端点为 ,答案即为 。若串中存在位置不为 的单个的 ,则答案为 。
线段树维护左右 的个数、所有连续 段中最靠左的右端点的值,并记录一个单个 (优先记录非端点的,因为端点处的可能被合并)的位置即可。这个信息是支持标记下传、左右合并的。
复杂度 。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Misaka16172's Blog!
评论
re