CF1672H

· · 题解

nb 题

考虑计数区间内 0011 二元组的数量,分别设为 x,y

首先显然每次会删掉一个极长的满足条件的区间。

假如删掉了一个偶数长度的区间(0[0101...0101]1\rightarrow 01),那么 xy 都会减少一。

假如删掉一个奇数长度的区间,(1[1010...0101]1\rightarrow 11),那么 xy 会减少一。

并且发现只要 xy 都不为 0,那么总是可以找到一个偶数长度的区间删(相邻的两个不同的二元组之间总是可以删掉)。

同理,奇数长度段在 xy 不为零时一定可以找到并删掉。

由于我们一定要消掉所有的二元组,并且显然没有更好的删掉的策略,所以消掉所有的二元组最少要 \max (x,y) 次(不妨设 x\leq y,前 x 次删偶数长度段,后 y-x 次删奇数长度段)。

于是最终的答案就是 \max(x,y)+1 ,前缀和优化回答询问即可。

code & data:https://codeforces.com/contest/1672/submission/155021164

题外话:CF 官方题解是一个超级复杂的论文解法,想锻炼英语阅读的话可以去看看(