Постановка задачи дается в problem и является s следующим образом: -Понимание более быстрого подхода к решению этого вопроса?
N студенты скучают в компьютерном классе, чтобы они смотреть смешные видео клипы на YouTube.
Сайт содержит K популярных клипов с номерами от 1 до N. Когда просматривается видеоролик , на странице отображается список похожих видеороликов.
Каждый студент выбирает видеоролик с главной страницы и начинает смотрит его. Спустя ровно одну минуту каждому студенту надоедает его или ее видеоклип, поэтому он открывает первый видеоклип из списка похожих роликов на стороне (даже если он уже смотрел этот клип).
Напишите программу, которая определяет для каждого учащегося, что видеоклип он будет наблюдать на M-й минуте класса.
Теперь я знаю, как решить это, мы находим путь, и если он содержит цикл. Мы получаем ответ, используя его период.
Но я нашел более быстрый подход в Интернете, чтобы сделать это, поскольку он является недокументированным кодом, а я, будучи новичком, не могу понять, что происходит в приведенном ниже коде.
int N = in.nextInt(), K = in.nextInt(), M = in.nextInt() - 1;//Reading input
int log = Integer.numberOfTrailingZeros (Integer.highestOneBit (M)) + 1;
int [][] next = new int [K][log + 1];
int [] start = new int [N];
for (int i = 0; i < N; i++)
start [i] = in.nextInt() - 1;
for (int i = 0; i < K; i++)
next [i][0] = in.nextInt() - 1;
for (int i = 1; 1 << i <= M; i++)
for (int j = 0; j < K; j++)
next [j][i] = next [next [j][i - 1]][i - 1];
for (int i = 0; 1 << i <= M; i++)
if (((1 << i) & M) > 0)
for (int j = 0; j < N; j++)
start [j] = next [start [j]][i];
out.print (start [0] + 1);
for (int i = 1; i < N; i++)
out.print (" " + (start [i] + 1)); //writing output
Как мы можем эффективно решить проблему/не столкнуться с проблемой поиска циклов? Или Как приведенный выше код решает проблему?
Вы должны добавить языковой тег или тег агностики языка – bolov
Почему циклы актуальны здесь? Это не имеет значения, если студент уже смотрел видео, поэтому вы можете игнорировать циклы. – Paul
@Paul «он открывает первый видеоклип из списка похожих клипов сбоку (** даже если он уже смотрел этот клип **)». –