彩灯
题号:NC53182
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

译自 JOI 2013 Final T1「電飾
每年JOI高中的文化祭上,走廊上都会有彩灯装饰。共有N个彩灯,从走廊的西侧到东侧排成一列。每个彩灯要么亮要么不亮。
JOI高中的仓库里沉睡着一台能够对彩灯进行操作的机器。对于指定的连续的一段彩灯,此机器能将这些彩灯中所有亮的变成不亮的,所有不亮的变成亮的。但是由于这个机器已经老化了,所以最多只能使用一次。
JOI高中的学生们很喜欢彩灯的交替列(亮的彩灯和不亮的彩灯交替排列的一段连续的彩灯)。他们希望能够在必要时使用一次这个机器,使得所有彩灯中所含的最长的交替列最长。
例子
例如,彩灯从西向东依次为:
TIM20180807230724.png(○ 表示亮的彩灯,●表示不亮的彩灯)。此时,对从第4个彩灯到第7个彩灯进行操作。

这样,第2个彩灯到第8个彩灯之间的彩灯组成了长为7的交替列。

另外,可以对第8个彩灯进行操作。

这样,第4个彩灯到第10个彩灯之间的彩灯组成了长为7的交替列。

使用一次此机器不可能有长度为8或以上的交替列。
任务
给出每个彩灯的情况,求出在最多使用一次机器的情况下,最长交替列长度的最大值。

输入描述:

输入标准如下:
第一行为一个整数N;
第二行为N个以空格分开的数字0或1,表示机器操作前的彩灯的情况。第个数字表示从西侧开始的第i个彩灯的状态,为1表示彩灯是亮的,为0表示彩灯是不亮的。

输出描述:

输出一行一个整数:表示可能的最长交替列的最大长度。
示例1

输入

复制
10
1 1 0 0 1 0 1 1 1 0

输出

复制
7

说明

这就是题目描述中的例子。
示例2

输入

复制
10
1 0 0 0 0 1 0 1 0 1

输出

复制
8

说明

对从西侧开始的第4个彩灯进行操作,得到长度为8的最长交替列。
示例3

输入

复制
5
1 1 0 1 1

输出

复制
5

说明

对从西侧开始第2个彩灯到第4个彩灯进行操作,所有彩灯共同构成最长交替列。
示例4

输入

复制
3
0 1 0

输出

复制
3

说明

注意:存在不使用机器而能达到最大值的情况。

备注:

CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2761