CF997A Convert to Ones
题目描述
你有一个由 $a_1, a_2, \dots, a_n$ 组成的字符串,字符串只包含 $0$ 和 $1$。
我们称一段连续的元素 $a_i, a_{i+1}, \ldots, a_j$($1 \leq i \leq j \leq n$)为字符串 $a$ 的一个子串。
你可以对字符串 $a$ 进行如下两种操作,次数不限:
- 选择字符串 $a$ 的某个子串(可以是整个字符串),将其反转,需支付 $x$ 个硬币(例如,「0101101」$\to$「0111001」);
- 选择字符串 $a$ 的某个子串(可以是整个字符串,也可以是单个字符),将其中的每个符号取反($0$ 变为 $1$,$1$ 变为 $0$),需支付 $y$ 个硬币(例如,「0101101」$\to$「0110001」)。
你可以以任意顺序进行这些操作。允许对同一个子串多次进行操作。
你需要将字符串 $a$ 变成只包含 $1$ 的字符串。请问最少需要花费多少硬币?如果不需要进行任何操作,请输出 $0$。
输入格式
输入的第一行包含三个整数 $n$、$x$ 和 $y$($1 \leq n \leq 300\,000, 0 \leq x, y \leq 10^9$),分别表示字符串的长度、反转操作的费用和取反操作的费用。
第二行包含一个长度为 $n$ 的只包含 $0$ 和 $1$ 的字符串 $a$。
输出格式
输出一个整数,表示将字符串变为全 $1$ 所需的最小总费用。如果不需要进行任何操作,输出 $0$。
说明/提示
在第一个样例中,首先需要反转子串 $[1 \dots 2]$,然后取反子串 $[2 \dots 5]$。
字符串变化如下:
「01000」$\to$「10000」$\to$「11111」。
总费用为 $1 + 10 = 11$。
在第二个样例中,首先取反子串 $[1 \dots 1]$,然后取反子串 $[3 \dots 5]$。
字符串变化如下:
「01000」$\to$「11000」$\to$「11111」。
总费用为 $1 + 1 = 2$。
在第三个样例中,字符串已经全为 $1$,所以答案为 $0$。
由 ChatGPT 4.1 翻译