Ctrl K

Бег по трём дорожкам

Средняя
Беговая дорожка состоит из трёх полос с номерами 1, 2, 3 и размечена отметками от 0 до n. Бегун стартует на отметке 0 на полосе 2 и должен добраться до отметки n на любой полосе. Массив blocks длины n + 1 описывает барьеры: если blocks[i] = k > 0, на отметке i полоса k перекрыта; если blocks[i] = 0, на отметке i барьеров нет. На каждой отметке перекрыто не больше одной полосы, на отметках 0 и n барьеров нет. С отметки i на отметку i + 1 бегун перемещается по своей полосе, если на ней на отметке i + 1 нет барьера. Кроме того, на любой отметке он может перейти на любую другую полосу (не обязательно соседнюю), если та на этой отметке свободна. Верните наименьшее число смен полосы, за которое можно добежать до финиша.
Пример 1
blocks=[0, 2, 0, 0] → 1

На отметке 1 средняя дорожка перекрыта. Перед ней бегун переходит на дорожку 1 или 3 — одна смена.

Пример 2
blocks=[0, 1, 3, 2, 0] → 1

Можно бежать по полосе 2 до отметки 2, там перейти на полосу 1 и добежать по ней до финиша — одна смена. Без смен не обойтись: на отметке 3 полоса 2 перекрыта.

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

Средняя дорожка свободна на всём пути — смены не нужны.

Ограничения
  • 1 ≤ n ≤ 5 · 10⁵, len(blocks) = n + 1
  • 0 ≤ blocks[i] ≤ 3
  • blocks[0] = blocks[n] = 0
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиМеньше всего прыжков до конца СредняяДобраться до последней клетки СредняяСколько угодно сделок СредняяСамая длинная «качель» СредняяОтменить как можно меньше встреч Средняя
загружаем Python…
Вход
blocks=[0, 2, 0, 0]
Ожидается
1

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