Вопрос:

На киберполигоне участники решают задания. Организаторы хотят наградить участника, который набрал больше всего очков. За каждое решённое задание начисляются очки по формуле: - базовые очки за сложность задания: Е (easy) - 50, M (medium) - 80, H (hard) - 120; - штраф 2 очка за каждую минуту, потраченную на решение; - если участник использовал подсказку (флаг 1), дополнительно вычитается 10 очков; - если значение по формуле получилось отрицательным, за это задание начисляется 0 очков. Входные данные. Сначала вводится натуральное число n – количество решённых заданий всеми участниками. Затем следуют n строк, в каждой строке записаны: время решения в минутах (натуральное число), сложность (E, M или H), флаг использования подсказки (0 или 1), имя участника (строка из латинских букв, без пробелов). Выходные данные. Выведите имя участника, набравшего наибольшее количество очков. Гарантируется, что такой участник ровно один. В поле краткого ответа введите имя сотрудника, которое получается в результате работы программы на входных данных из файла 6_3.txt. В поле для развернутого ответа запишите программный код решения задачи.

Ответ:

Алгоритм решения задачи:

Для решения этой задачи потребуется написать программу, которая будет обрабатывать входные данные, рассчитывать очки для каждого участника и определять победителя.

1. Расчёт очков за одно задание:

  1. Базовые очки зависят от сложности:
    • E (easy): 50 очков
    • M (medium): 80 очков
    • H (hard): 120 очков
  2. Вычитается штраф за время: 2 очка за каждую минуту.
  3. Если использовалась подсказка (флаг = 1), вычитается дополнительно 10 очков.
  4. Если итоговое значение очков за задание отрицательное, то за это задание начисляется 0 очков.

2. Обработка входных данных:

  1. Сначала считывается число `n` — количество решённых заданий.
  2. Затем `n` раз считываются строки, содержащие: время, сложность, флаг подсказки и имя участника.
  3. Для каждого участника нужно накапливать общую сумму очков.

3. Определение победителя:

  1. После обработки всех записей, нужно найти участника с максимальной суммой очков.
  2. Гарантируется, что такой участник будет один.
  3. Вывести имя этого участника.

Пример реализации на Python:

def calculate_score(time_minutes, difficulty, used_hint):
score = 0
if difficulty == 'E':
score = 50
elif difficulty == 'M':
score = 80
elif difficulty == 'H':
score = 120

score -= time_minutes * 2

if used_hint == 1:
score -= 10

if score < 0:
score = 0
return score


def solve():
n = int(input())
scores = {}

for _ in range(n):
time_str, difficulty, hint_str, name = input().split()
time_minutes = int(time_str)
used_hint = int(hint_str)

current_score = calculate_score(time_minutes, difficulty, used_hint)

if name not in scores:
scores[name] = 0
scores[name] += current_score

max_score = -1
winner_name = ""

for name, total_score in scores.items():
if total_score > max_score:
max_score = total_score
winner_name = name

print(winner_name)

solve()

Ответ: имя участника, набравшего наибольшее количество очков.

Подать жалобу Правообладателю