#4721. [USACO 1.2.4] Broken Necklace
[USACO 1.2.4] Broken Necklace
Broken Necklace
你有一条由 个红色、白色或蓝色珠子组成的项链(),其中一些是红色的,一些是蓝色的,还有一些是白色的,它们的排列是随机的。以下是 时的两个示例:
1 2 1 2
r b b r b r r b
r b b b
r r b r
r r w r
b r w w
b b r r
b b b b
b b r b
r r b r
b r r r
b r r r
r r r b
r b r r r w
图 A 图 B
r 红色珠子
b 蓝色珠子
w 白色珠子
在接下来的文字中提到的第一个和第二个珠子已在图中标记。
图 A 中的配置可以用一个由 b 和 r 组成的字符串表示,其中 b 表示蓝色珠子,r 表示红色珠子,如下所示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb 。
假设你要在某个点将项链折断,将其平铺,然后从一端开始收集相同颜色的珠子,直到遇到不同颜色的珠子,然后对另一端做同样的操作(另一端的珠子颜色可能与之前收集的珠子颜色不同)。
确定应该在何处折断项链,以便可以收集到最多的珠子。每个珠子只能收集一次。
示例
例如,对于图 A 中的项链,可以在第 9 个珠子和第 10 个珠子之间或第 24 个珠子和第 25 个珠子之间折断,从而收集到 8 个珠子。
在一些项链中,还加入了白色珠子,如上图 B 所示。在收集珠子时,遇到的白色珠子可以被视为红色或蓝色,然后涂上所需的颜色。表示这种配置的字符串可以包含 r、b 和 w 这三个符号中的任何一个。
编写一个程序,确定从提供的项链中可以收集到的最大珠子数量。
程序名称:beads
输入格式
第 1 行:N,珠子的数量
第 2 行:一个由 N 个字符组成的字符串,每个字符可以是 r、b 或 w
示例输入(文件 beads.in)
29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
输出格式
一个包含从提供的项链中可以收集到的最大珠子数量的单行。
示例输出(文件 beads.out)
11
输出说明
考虑两份珠子(有点像可以绕过两端)。11 个珠子的字符串已标记。
两份项链在此处连接
v
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb|wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
******|*****
rrrrrb|bbbbb <-- 分配
5xr .....#|##### 6xb
5+6 = 11 总数