AT_joi2013ho1 電飾 (Illumination)

题目描述

在 JOI 高中的文化节上,每年都会在走廊上装饰灯饰。灯饰由 $N$ 个灯泡组成,这些灯泡从走廊的西侧到东侧排成一列。每个灯泡要么是亮着的,要么是灭着的。 JOI 高中的仓库里有一台可以操作灯泡的机器。这台机器可以指定灯饰中一段连续的灯泡,将指定范围内所有亮着的灯泡变为灭着,所有灭着的灯泡变为亮着。但由于机器老化,只能使用 $1$ 次。 JOI 高中的学生们喜欢亮灭交替排列的灯泡序列(这种灯泡序列称为**交替序列**)。因此,他们希望通过最多使用一次机器,使灯饰中包含尽可能长的交替序列。

输入格式

从标准输入读取以下数据: - 第 $1$ 行为整数 $N$。 - 第 $2$ 行有 $N$ 个用空格分隔的 $0$ 或 $1$,表示操作机器前每个灯泡的状态。从左到右第 $i$ 个数($1 \leq i \leq N$)表示从西侧起第 $i$ 个灯泡的状态,$1$ 表示灯泡亮着,$0$ 表示灯泡灭着。

输出格式

输出一个整数,表示通过最多使用一次机器后,灯饰中所能包含的最长交替序列的长度。

说明/提示

### 例子 例如,灯饰从西到东的排列为: > ○ ○ ● ● ○ ● ○ ○ ○ ● (○ 表示亮着的灯泡,● 表示灭着的灯泡) 此时,如果对第 $4$ 个到第 $7$ 个灯泡使用机器: > ○ ○ ● ○ ● ○ ● ○ ○ ● 则第 $2$ 个到第 $8$ 个灯泡构成了长度为 $7$ 的交替序列。 > ○ ○ ● ○ ● ○ ● ○ ○ ● 如果只对第 $8$ 个灯泡使用机器: > ○ ○ ● ● ○ ● ○ ● ○ ● 则第 $4$ 个到第 $10$ 个灯泡构成了长度为 $7$ 的交替序列。 > ○ ○ ● ● ○ ● ○ ● ○ ● 最多使用一次机器,无法得到长度大于 $8$ 的交替序列。 ### 任务 给定灯饰的信息,请编写程序,求出通过最多使用一次机器后,灯饰中所能包含的最长交替序列的长度。 ### 限制 $2 \leq N \leq 100\,000$ ### 评分标准 在 $20\%$ 的测试点中,$N \leq 500$。 在 $40\%$ 的测试点中,$N \leq 2\,000$。 # 样例解释 1 这是题目描述中的例子。 # 样例解释 2 如果只操作西侧第 $4$ 个灯泡,可以得到长度为 $8$ 的交替序列。 # 样例解释 3 如果操作西侧第 $2$ 个到第 $4$ 个灯泡,可以使所有灯泡构成交替序列。 # 样例解释 4 注意,有时可以不使用机器。 由 ChatGPT 4.1 翻译