#UT114. [USACO1.1.4] 破碎的项链 Broken Necklace
[USACO1.1.4] 破碎的项链 Broken Necklace
破碎的项链
你有一条由 N 个红色、白色或蓝色珠子(3<=N<=350)组成的项链,这些珠子随机排列。以下是 n=29 的两个示例:
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 的项链,可以收集到 8 个珠子,断开点可以在第 9 和第 10 个珠子之间,或者在第 24 和第 25 个珠子之间。
在某些项链中,如图 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 总数
Related
In following homework: