题单练习 挑战赛 普及/提高- 题

A5036 | 午枫的01串翻转

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

小枫有一个长度为 $n$ 的 $01$ 串 $s$ ,这个 $01$ 串从左往右的第 $i$ 个数为 $s_i$ ,小午可以对这个 $01$ 串做任意次(可以不做)操作:

  • 选择一段区间 $[l,r]$ 满足 $1 \leq l r \leq n, s_l=0,s_r=1$ 。
  • 对于这段区间的每一位 $s_i(l\leq i \leq r)$ ,将其变为 $s_i \oplus 1$ ,其中 $\oplus$ 表示按位异或。
小枫想知道小午操作后得到的所有可能的 $01$ 串中,距离最远的两个 $0$ 的距离是多少。

特别的,如果没有 $0$ 或只有一个 $0$ 的情况,我们视为其的距离为 $0$ 。

距离:两数所在位置差值的绝对值,例如,两个数的位置分别是 $a$ 和 $b$ ,则两数的距离为 $|a-b|$ 。

输入格式

第一行输入一个正整数 $n$ $(1\leq n\leq 10^6)$ ,表示字符串长度。

第二行输入一个长度为 $n$ 的 $01$ 串 $s$ ,表示初始 $01$ 串,保证 $s_i\in\{0,1\}$

输出格式

输出一个整数,表示所有可能的 $01$ 串中,距离最远的两个 $0$ 的距离是多少。

输入输出样例

输入 #1
5
10101
输出 #1
3
C++ 编辑器
输入
输出