Ctrl K

Платные переключения битов

Средняя
Даны две двоичные строки одинаковой длины n: current и wanted, а также целое число far_cost. Нужно превратить current в wanted, применяя к current операции любое число раз: - выбрать два любых разных индекса i и j и инвертировать оба символа current[i] и current[j] — это стоит far_cost; - выбрать индекс i < n - 1 и инвертировать два соседних символа current[i] и current[i + 1] — это стоит 1. Инвертировать символ — значит заменить 0 на 1 или 1 на 0. Верните минимальную суммарную стоимость, за которую current станет равной wanted, или -1, если это невозможно.
Пример 1
current='0110', wanted='1001', far_cost=3 → 2

Отличаются все четыре позиции. Две соседние смены — позиции 0 и 1, затем 2 и 3 — стоят 1 + 1 = 2.

Пример 2
current='100001', wanted='000000', far_cost=2 → 2

Отличаются позиции 0 и 5. Цепочка соседних смен от 0 до 5 стоила бы 5, а одна дальняя смена — всего 2.

Пример 3
current='111', wanted='110', far_cost=1 → -1

Отличается одна позиция, а каждая операция меняет ровно два бита — исправить нечётное число отличий невозможно.

Ограничения
  • 1 ≤ n ≤ 500, len(current) == len(wanted) == n
  • 1 ≤ far_cost ≤ 500
  • Строки состоят только из символов 0 и 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый длинный зеркальный кусок СредняяВсе правильные скобочные строки СредняяНаименьшее число правок СредняяСколькими способами прочитать шифр СредняяСплести две строки Средняя
загружаем Python…
Вход
current='0110', wanted='1001', far_cost=3
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 116 тестов на сервере, включая скрытые.