Ctrl K

Гирлянда из трёх ламп

Средняя
Ряд ламп задан массивом lamps: 1 — лампа горит, 0 — погашена. Есть переключатель, который меняет состояние сразу трёх соседних ламп: горевшие гаснут, погашенные загораются. Нажимать его можно сколько угодно раз и на любой тройке подряд идущих ламп. Верните наименьшее число нажатий, после которого горят все лампы, или -1, если зажечь весь ряд невозможно.
Пример 1
lamps=[1, 0, 0, 0, 1] → 1

Одно нажатие на лампы 1–3 — и весь ряд горит.

Пример 2
lamps=[0, 0, 1, 1, 0, 1] → -1

Нажимаем на 0–2: [1, 1, 0, 1, 0, 1]. Затем на 2–4: [1, 1, 1, 0, 1, 1]. Затем на 3–5: всё горит. Итого 3.

Пример 3
lamps=[1, 1, 0, 1] → -1

Лампу 0 меняет только тройка 0–2, поэтому её нажимают чётное число раз. Лампу 1 меняют тройки 0–2 и 1–3, значит и 1–3 нажимают чётное число раз. Тогда лампа 2 ни разу не изменится по итогу и останется погашенной.

Ограничения
  • 3 ≤ len(lamps) ≤ 10⁵
  • lamps[i] — 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЗажечь все лампы окном СложнаяКороткий отрезок с нужной суммой СложнаяСамая длинная серия станков в бюджет СложнаяСвязь в самом глухом селе СложнаяСамый короткий рывок Средняя
загружаем Python…
Вход
lamps=[1, 0, 0, 0, 1]
Ожидается
1

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