Ctrl K

Где встретиться двоим

Средняя
В городе n остановок с номерами от 0 до n - 1. С каждой остановки ведёт не больше одного маршрута: next_stop[i] — номер следующей остановки после i, или -1, если дальше с i ехать некуда. Маршруты могут замыкаться в круг. Двое начинают путь с остановок start_a и start_b и двигаются только по маршрутам. Остановка подходит для встречи, если до неё могут добраться оба (стартовая остановка тоже считается, до неё 0 шагов). Для такой остановки посчитайте, сколько шагов нужно каждому, и возьмите большее из двух чисел. Верните остановку, у которой это число минимально. Если таких несколько, верните остановку с меньшим номером. Если общей остановки нет, верните -1.
Пример 1
next_stop=[1, 2, 3, -1, 2], start_a=0, start_b=4 → 2

Первый идёт 0 → 1 → 2 → 3, второй 4 → 2 → 3. До остановки 2 им нужно 2 и 1 шаг, максимум 2; до остановки 3 — 3 и 2, максимум 3. Лучше всего встретиться на остановке 2.

Пример 2
next_stop=[1, 0, -1, 2], start_a=0, start_b=3 → -1

Первый ходит по кругу 0 → 1 → 0, второй идёт 3 → 2 и останавливается. Общих остановок нет.

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

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