Задать вопрос
9 ноября, 22:48

Задача 1. Игра в мяч Дети встали в круг и бросают друг другу мяч. Известно, что каждый ребёнок бросает мяч всегда одному и тому же ребёнку, например, первый ребёнок бросает всегда седьмому, второй ребёнок всегда бросает третьему, и так далее. Известно, у какого ребёнка находится мяч в начале игры. Требуется определить, у какого ребёнка будет мяч после заданного количества бросков. Входные данные В первой строке записываются целые числа n - количество детей, a - номер ребёнка, у которого находится мяч в начале игры, и m - количество бросков мяча (2 ≤ n ≤ 1000, 1 ≤ a ≤ n, 0 ≤ m ≤ 1000000). Во второй строке содержится n целых чисел k1, k2, ..., kn, где ki - номер ребёнка, которому бросает мяч ребёнок номер i (1 ≤ ki ≤ n, ki ≠ i). Выходные данные Выведите номер ребёнка, у которого окажется мяч в конце игры.

+1
Ответы (1)
  1. 10 ноября, 00:10
    0
    Если m > n, то рано или поздно процесс зациклится. Найдём этот цикл (O (n)), а затем за O (n) получим ответ. Для удобства в массивы добавлен пустой нулевой элемент.

    python 3.5

    a, m, n = map (int, input (). split ())

    to = [None for _ in range (n + 1) ]

    to[0], to[1:] = None, map (int, input (). split ())

    first_pass = [None for _ in range (n + 1) ]

    length_of_cycle = None

    move = 1

    current_kid = a

    while move < m:

    if length_of_cycle is None:

    if first_pass[current_kid] is not None:

    length_of_cycle = move - first_pass[current_kid]

    move + = (m - move) / / length_of_cycle * length_of_cycle

    if move = = m:

    break

    else:

    first_pass[current_kid] = move

    move + = 1

    current_kid = to[current_kid]

    print (current_kid)
Знаете ответ?
Сомневаетесь в ответе?
Найдите правильный ответ на вопрос ✅ «Задача 1. Игра в мяч Дети встали в круг и бросают друг другу мяч. Известно, что каждый ребёнок бросает мяч всегда одному и тому же ребёнку, ...» по предмету 📘 Информатика, а если вы сомневаетесь в правильности ответов или ответ отсутствует, то попробуйте воспользоваться умным поиском на сайте и найти ответы на похожие вопросы.
Смотреть другие ответы
Похожие вопросы по информатике
Помогите решить! 1))) Вводятся 4 числа: a, b, c и d. Выведите все числа на отрезке от a до b, дающие остаток c при делении на d Входные данные 1 4 1 2 выходные данные 1 3 Входные данный 1 5 0 4 выходные данные 4 2))) Выведите все числа на отрезке от
Ответы (1)
Уровень B. Задача M. Две одинаковые цифры рядом Напишите программу, которая определяет, верно ли, что введённое число содержит две одинаковых цифры, стоящие рядом (как, например, 221). Входные данные Входная строка содержит одно натуральное число.
Ответы (1)
Входные данные Вводится натуральное число N, которое не превосходит 30. Выходные данные Вычислите 1+2+22+23+ ...+2 N. Примеры входные данные 1 выходные данные 3 входные данные 4 выходные данные 31
Ответы (1)
Выведите все натуральные делители числа x в порядке возрастания (включая 1 и само число). Входные данные Вводится натуральное число x Выходные данные Выведите все делители числа x Примеры входные данные 7 выходные данные 1 7 входные данные 21
Ответы (1)
Написать на Паскале Четные числа Входные данные Вводятся целые числа a и b. Гарантируется, что a не превосходит b Выходные данные Выведите (через пробел) все четные числа от a до b (включительно). входные данные 2 5 выходные данные 2 4
Ответы (1)