Счета пронумерованы от 0 до n − 1. Со счёта i настроен автоперевод остатка на счёт nxt[i] (может быть и на себя).
Деньги со счёта 0 идут по цепочке 0 → nxt[0] → nxt[nxt[0]] → …. Счетов конечное число, поэтому цепочка обязательно зациклится.
Верните [вход, длина]: первый счёт цепочки, который лежит на цикле, и число счетов в цикле. Решите без дополнительной памяти, пропорциональной n.
В работе: Антифрод-проверка в Альфа-Банке: автопереводы клиента замкнулись в кольцо, и деньги бесконечно ходят между счетами с комиссией.
Пример 1
nxt = [1, 2, 3, 4, 2]
[2, 3]
0 → 1 → 2 → 3 → 4 → 2: цикл 2, 3, 4 длины 3.
Пример 2
nxt = [0]
[0, 1]
Счёт переводит сам себе: цикл длины 1 на счёте 0.
Ограничения
- 1 ≤ n ≤ 10⁵
- 0 ≤
nxt[i]< n - Лимит — 2 с на тест (1500 мс).
print() и console.log() уходят в консоль.
def chain_loop(nxt):
Источник: наша задача на данных Альфа-Банка. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.