Олимпиадный тренинг

Задача . C. Газопровод


Вам назначили задачу проложить газопровод вдоль дороги. Для простоты будем считать, что дорога — это отрезок \([0, n]\) на оси \(OX\). На дороге может быть несколько перекрестков, но для простоты будем считать каждый перекресток как интервал \((x, x + 1)\) для некоторого целого \(x\). Таким образом, можно представить дорогу как двоичную строку, состоящую из \(n\) символов, где цифра 0 означает, что текущий интервал не содержит перекресток, а 1 означает, что интервал содержит перекресток.

Обычно газопровод можно установить вдоль дороги на высоте \(1\) вместе с поддерживающими его столбами в каждой целой точке (поэтому при установке вдоль дороги \([0, n]\) нам необходимо поставить \(n + 1\) столб). Но на перекрестках нам необходимо поднять трубу на высоту \(2\), чтобы она не мешала проезду машин.

Мы можем поднять или опустить трубу за счет вставки зигзагообразных частей. Каждый зигзаг можно представить как отрезок \([x, x + 1]\) с целым \(x\), состоящий из трех частей: \(0.5\) единицы горизонтальной трубы + \(1\) единицы вертикальной трубы + \(0.5\) горизонтальной. Заметьте, что если труба находится на высоте \(2\), столбы, ее поддерживающие, также должны быть длины \(2\).

Каждая единица длины газопровода стоит нам \(a\) бурлей, а каждая единица длины столба — \(b\) бурлей. Поэтому не всегда выгодно просто пустить трубопровод на высоте \(2\). Определите форму трубопровода с минимальной возможной ценой, а также его цену.

Заметим, что вы обязаны начать и закончить трубу на высоте \(1\), а также гарантируется, что первый и последний символы во входной строке обязательно равны 0.

Входные данные

В первой строке задано одно число \(T\) (\(1 \le T \le 100\)) — количество независимых запросов. В следующих \(2 \cdot T\) строках заданы запросы — один запрос на две строки.

В первой строке заданы три целых числа \(n\), \(a\), \(b\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le a \le 10^8\), \(1 \le b \le 10^8\)) — длина дороги, цена за единицу длины трубы и цена за единицу длины столба, соответственно.

Во второй строке задана двоичная строка \(s\) (\(|s| = n\), \(s_i \in \{0, 1\}\), \(s_1 = s_n = 0\)) — описание дороги.

Гарантируется, что суммарная длина строк \(s\) во всех запросах не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) чисел — по одному на запрос. Для каждого запроса выведите минимальную возможную стоимость построенного трубопровода.

Примечание

Оптимальный газопровод для первого запроса изображен на рисунке сверху.

Оптимальный газопровод для второго запроса изображен ниже:

Оптимальный (и единственный) газопровод для третьего примера изображен ниже:

Оптимальный газопровод для четвертого примера изображен ниже:


Примеры
Входные данныеВыходные данные
1 4
8 2 5
00110010
8 1 1
00110010
9 100000000 100000000
010101010
2 5 1
00
94
25
2900000000
13

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя