Ctrl K

Линия метро с тоннелем

Сложная
На линии метро stations станций с номерами от 1 до stations. Соседние станции i и i + 1 соединены перегоном. Кроме того, есть один скоростной тоннель между станциями tunnel_from и tunnel_to — он тоже считается одним перегоном и работает в обе стороны. Номера концов тоннеля могут совпадать — тогда тоннель бесполезен. Длина поездки между двумя станциями — наименьшее число перегонов, которое нужно проехать. Верните массив длины stations, где элемент с индексом k - 1 равен числу **упорядоченных** пар различных станций (p, q), для которых длина поездки равна ровно k. Пары (p, q) и (q, p) считаются отдельно. Станций может быть очень много, перебор всех пар не уложится во время.
Пример 1
stations=6, tunnel_from=1, tunnel_to=4 → [12, 10, 6, 2, 0, 0]

Станции 1–4 вместе с тоннелем образуют кольцо из четырёх станций. В нём все соседи (включая 1 и 4) на расстоянии 1, а противоположные станции — на расстоянии 2. Станции 5 и 6 висят хвостом за станцией 4; самая дальняя поездка — от 6 до 2 или 3 — занимает 4 перегона.

Пример 2
stations=4, tunnel_from=2, tunnel_to=3 → [6, 4, 2, 0]

Тоннель дублирует обычный перегон между 2 и 3, поэтому ничего не меняет: линия из четырёх станций.

Пример 3
stations=3, tunnel_from=3, tunnel_to=1 → [6, 0, 0]
Ограничения
  • 2 ≤ stations ≤ 10⁵
  • 1 ≤ tunnel_from, tunnel_to ≤ stations
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиУлица с одной короткой дорогой СредняяПорядок букв по словарю СложнаяСамый длинный подъём по карте СложнаяМаршрут по всем посадочным СложнаяСамый доходный участок под лимитом Сложная
загружаем Python…
Вход
stations=6, tunnel_from=1, tunnel_to=4
Ожидается
[12, 10, 6, 2, 0, 0]

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