Ctrl K

День, когда обойдены все комнаты

Средняя
Ночной охранник обходит здание из n комнат с номерами от 0 до n - 1. Каждый день он заходит ровно в одну комнату; дни нумеруются с нуля, и в день 0 он в комнате 0. Куда идти завтра, решает правило с массивом back_to длины n. Пусть сегодня охранник в комнате i: - если он побывал в ней **нечётное** число раз (считая сегодняшний визит), завтра он идёт в комнату back_to[i], где 0 ≤ back_to[i] ≤ i; - если **чётное** — завтра он идёт в комнату (i + 1) mod n. Верните номер первого дня, к которому охранник побывал во всех комнатах. Такой день всегда наступает. Ответ бывает огромным, поэтому верните его по модулю 10⁹ + 7.
Пример 1
back_to=[0, 1] → 2

День 0: комната 0, первый визит (нечётный) — назад в back_to[0] = 0. День 1: снова комната 0, визит второй (чётный) — вперёд. День 2: комната 1, все комнаты пройдены.

Пример 2
back_to=[0, 1, 1] → 4

Порядок комнат по дням: 0, 0, 1, 1, 2 — в комнату 2 охранник впервые попадает на день 4.

Пример 3
back_to=[0, 0, 0] → 6

Порядок: 0, 0, 1, 0, 0, 1, 2 — каждый первый визит в комнату 1 отбрасывает к самому началу, ответ 6.

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

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