Блог учителя Информатики

Комментарии отключены

Решение олимпиадных задач по информатике: Линейный футбол

Сегодня решаем олимпиадную задачу по информатике школьного этапа 2022 года. Задача: "Линейный футбол". 9 - 11 класс.


Условие задачи:

Близнецам Петру и Павлу родители подарили на день рождения настольный футбол, но не простой, а линейный.
В этом варианте игры все фигурки игроков расположены в одну линию на равном расстоянии друг от друга. Всего есть n игроков. Для определённости пронумеруем их позиции числами от 1 до n слева направо. Ворота находятся в позициях 0 и n+1. Каждый игрок имеет свою силу удара и может при ударе по мячу перебросить его на фиксированное количество позиций другому игроку. Силу удара игрока на позиции i обозначим через ai, что означает, что после удара этого игрока мяч переместится на ai позиций. Если ai положительное, то мяч переместится вправо, в сторону увеличения номеров, а если ai отрицательное, то мяч переместится влево, в сторону уменьшения. Если после удара мяч попадает в позицию, меньшую либо равную 0, то засчитывается гол в левые ворота, а если в позицию, большую либо равную n+1, то в правые. Если после удара мяч попадает к другому игроку, то тот наносит следующий удар со своей силой, и игра продолжается.
Близнецы решили сыграть n игр, в i‑й из которых первый удар нанесёт игрок номер i. Для каждой игры выведите, в какие ворота будет забит мяч в этой игре (L, если в левые, R, если в правые, U, если гол никто не забьёт).

n = int(input())
players = [int(input()) for _ in range(n)]
answer = ''

for i in range(n):
    k = i
    while k + players[k] > -1 and k + players[k] < n:
        if players[k] + players[k + players[k]] != 0:
            k += players[k]
        else:
            answer += 'U'
            break
    if k + players[k] < 0:
        answer += 'L'
    elif k + players[k] > n - 1:
        answer += 'R'

print(answer)
var
  n,i,k:integer;
  answer:string;
  players:array of integer;

begin
  read(n);
  players := new integer[n];
  for i := 0 to n - 1 do
    read(players[i]);
  answer := '';
  for i := 0 to n - 1 do
  begin
    k := i;
    while (k + players[k] > -1) and (k + players[k] < n) do
      if players[k] + players[k + players[k]] <> 0 then
        k := k + players[k]
      else
      begin
        answer := answer + 'U';
        break
      end;
    if k + players[k] < 0 then
      answer := answer + 'L'
    else if k + players[k] >= n then
      answer := answer + 'R';
  end;
  write(answer);
end.
Поделиться:
Вам также может понравится
Округление чисел в Python
Обмен значений двух переменных
Перевод чисел в Python
Решение олимпиадных задач по информатике: Полевые работы