[DTCPC 2024] Ultra
题目背景
Tony2 喜欢玩某二字游戏,这一天他在小 C 面前展示他的 $\text{Ultra}$。
但是小 C 不会 $\text{Ultra}$,所以他跑去图图酱一去了。
~~然后图图失败了~~
于是小 C 趁 Tony2 不在的时候偷偷地把他的跳跃键和下冲键交换了(
题目描述
Tony2 的操作可以看作下冲和跳跃的组合。
称一个 $\text{Ultra}$ 为一段连续的操作,以下冲开头,然后跳跃和下冲交替,并以下冲结束。由于是 $\text{Ultra}$,所以至少要有一次跳跃。
小 C 每次可以将一个 $\text{Ultra}$ 变成 $\text{uLTRA}$,也就是将这个 $\text{Ultra}$ 的每个下冲变成跳跃,将每个跳跃变成下冲。
小 C 不喜欢 $\text{Ultra}$,所以想要使得下冲次数尽量少。
**形式化题意**
给你一个 $01$ 序列,你可以进行如下操作若干次(或零次):
- 将序列中形如 $101\cdots01$ 的一个子串(即 $1(01)^k$,$k\ge 1$)替换成**等长**的 $010\cdots10$(即 $0(10)^k$)。
你要操作使得 $1$ 的个数尽可能少,输出最少的 $1$ 的个数。
输入输出格式
输入格式
一行一个长度为 $n$($n\le 10^6$) 的字符串表示这个 $01$ 序列。
输出格式
输出一个数表示最少的 $1$ 的个数。
输入输出样例
输入样例 #1
1010011
输出样例 #1
3
说明
样例 $1$ 解释:选中该串的前三个字符 $101$,对其操作后该串变为 $0100011$,仅包含 $3$ 个 $1$。容易证明这是最优的。