12015. Утворити паліндром
Відправити розв'язок
Бали:
100
Time limit:
2.0s
Memory limit:
500M
Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python
Вам надано рядок \(S\) довжини \(N\). Нехай \(S_i\) \((1≤i≤N)\) буде \(i\)-м символом \(S\).
Ви можете виконувати такі два види операцій нуль або більше разів у будь-якому порядку:
- Сплатити A грн. Перемістити крайній лівий символ \(S\) у правий кінець. Іншими словами, змініть \(S_1\) \(S_2 …S_N\) на \(S_2 …S_N S_1\) .
- Заплатити B грн. Виберіть ціле число \(i\) між 1 і \(N\) і замініть \(S_i\) будь-якою малою літерою англійського алфавіту.
Скільки потрібно заплатити, щоб зробити \(S\) паліндромом?
Обмеження
- \(1≤N≤5000\)
- \(1≤A,B≤10^9\)
- \(S\) – це рядок довжиною \(N\), що складається з малих літер англійського алфавіту.
- Усі значення у вхідних даних, крім \(S\), є цілими.
Формат вхідних даних
Перший рядок містить цілі числа \(N,A,B\).
Наступний рядок містить \(S\).
Формат вихідних даних
У вихідний потік виведіть відповідь.
Приклад вхідних даних
5 1 2
rrefa
Приклад вихідних даних
3
По-перше, заплатите 2 грн, щоб виконати операцію другого роду один раз: нехай \(i=5\) замінить \(S_5\) на e. S тепер rrefe.
Потім сплатіть 1 грн, щоб виконати операцію першого виду один раз. \(S\) тепер refer, що є паліндромом.
Таким чином, ви можете зробити \(S\) паліндромом за 3 грн.
Приклад вхідних даних
8 1000000000 1000000000
bcdfcgaa
Приклад вихідних даних
4000000000
Коментарі