AT_joi2024_yo2_c 白色光 2 (White Light 2)
题目描述
有 $N$ 个灯依次排列成一行,从左到右依次编号为 $1$ 到 $N$。每个灯的颜色可以是红色、绿色或蓝色。灯的颜色由字符串 $S$ 表示,第 $i$ 个灯的颜色由 $S$ 的第 $i$ 个字符确定,若该字符为 `R`,则是红色,若为 `G`,则为绿色,若为 `B`,则为蓝色。最开始所有的灯都是亮着的。
JOI 君可以只要还有至少一个灯是亮着的,就可以按照任意顺序,任意次进行以下三种操作。也可以一次操作都不进行。
- 支付 $A$ 日元,将当前所有点亮的灯中最左边的一个熄灭。
- 支付 $B$ 日元,将当前所有点亮的灯中最右边的一个熄灭。
- 支付 $C$ 日元,选择一个任意亮着的灯,将其点亮成任意一种颜色。
JOI 君希望远看这排灯时能呈现出漂亮的白色,因此需要保证亮着的灯颜色从左到右依次为 `RGBRGB...RGB`,即严格的 `RGB` (红绿蓝)循环。不存在亮着的灯时,也认为达成了 `RGB` 循环。像 `GBRGBR` 或 `RGBRG` 这样的排列不满足条件。
现给出灯的初始状态和操作所需的金额,请你编写程序,计算使亮着的灯的颜色排列变为 `RGB` 循环所需要的最小总花费。
输入格式
输入格式如下:
> $N$ $S$ $A$ $B$ $C$
输出格式
输出使亮着的灯的颜色排列变为 `RGB` 循环所需的最小总花费,不带单位(日元),输出一行。
说明/提示
## 小子任务
1.(4 分)$N = 3$。
2.(22 分)$N \leq 300$。
3.(19 分)$N \leq 10\,000$。
4.(9 分)$N$ 是 $3$ 的倍数,$A = 10^9$,$B = 10^9$,$C = 1$。
5.(10 分)$A = 10^9$,$B = 10^9$,$C = 1$。
6.(36 分)没有额外限制。
## 样例解释 1
例如如下顺序进行 $4$ 次操作后,点亮的灯颜色排列会成为 `RGB` 循环。用 `-` 表示已熄灭的灯。
1. 支付 $3$ 日元熄灭最左边的第 $1$ 号灯,状态为 `-RBBRG`。
2. 支付 $4$ 日元熄灭最右边的第 $6$ 号灯,状态为 `-RBBR-`。
3. 支付 $4$ 日元熄灭最右边的第 $5$ 号灯,状态为 `-RBB--`。
4. 支付 $5$ 日元把第 $3$ 号灯变成绿色,状态为 `-RGB--`。
无法少于 $16$ 日元实现目标,因此输出 $16$。
这个输入满足小子任务 $2,3,6$ 的约束。
## 样例解释 2
如下进行 $3$ 次操作后,点亮的灯颜色排列会成为 `RGB` 循环(`-`为熄灭):
1. 支付 $1$ 日元把第 $2$ 号灯变为绿色,状态为 `BGG`。
2. 支付 $1$ 日元把第 $3$ 号灯变为蓝色,状态为 `BGB`。
3. 支付 $1$ 日元把第 $1$ 号灯变为红色,状态为 `RGB`。
无法少于 $3$ 日元实现,因此输出 $3$。
满足小子任务 $1,2,3,4,5,6$ 的约束。
## 样例解释 3
如下操作 $3$ 次,点亮的灯颜色排列会变为 `RGB` 循环(`-`表示熄灭):
1. 支付 $9$ 日元熄灭最左边的第 $1$ 号灯,状态为 `-RB`。
2. 支付 $9$ 日元熄灭最左边的第 $2$ 号灯,状态为 `--B`。
3. 支付 $9$ 日元熄灭最左边的第 $3$ 号灯,状态为 `---`。
无法少于 $27$ 日元实现,因此输出 $27$。注意,当没有任何灯亮着时也认为满足条件。
该输入满足小子任务 $1,2,3,6$。
## 样例解释 4
当前排列已经是 `RGB` 的循环,因此输出 $0$。
输入满足小子任务 $2,3,4,5,6$。
## 样例解释 5
输入满足小子任务 $2,3,5,6$。
## 样例解释 6
输入满足小子任务 $2,3,6$。
## 数据范围
- $1 \leq N \leq 200\,000$。
- $S$ 是长度为 $N$ 的字符串。
- $S$ 的每个字符是 `R`、`G` 或 `B`。
- $1 \leq A \leq 10^9$。
- $1 \leq B \leq 10^9$。
- $1 \leq C \leq 10^9$。
- $N, A, B, C$ 均为整数。
由 ChatGPT 5 翻译