Вопрос:

Программирование. Python. Задание 6

Ответ:

Описание задания


На киберполигоне участники решают задания. Организаторы хотят наградить участника, который решит больше всех заданий. Очки начисляются по формуле:


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

Входные данные


Сначала вводится натуральное число n — количество решённых заданий всеми участниками. Затем следуют n строк, в каждой строке записаны:


  • время решения в минутах (натуральное число).
  • сложность (E, M или H).
  • флаг использования подсказки (0 или 1).
  • имя участника (строка из латинских букв, без пробелов).

Выходные данные


Выведите имя участника, набравшего наибольшее количество очков. Гарантируется, что такой участник только один.


В поле краткого ответа введите имя сотрудника, которое получается в результате работы программы на вашем компьютере, сохранив его в файл 6_3.txt.


В поле для развернутого ответа запишите программный код решения задачи.


Пример файла 6_3.txt (краткий ответ)


Ivanov


Программный код решения задачи (развернутый ответ)


# Входные данные
n = int(input())

participants_scores = {}

for _ in range(n):
time, difficulty, hint_flag_str = input().split() # Считываем время, сложность и флаг подсказки
participant_name = input() # Считываем имя участника

time = int(time)
hint_flag = int(hint_flag_str)

# Определяем базовые очки
if difficulty == 'E':
base_score = 50
elif difficulty == 'M':
base_score = 80
elif difficulty == 'H':
base_score = 120
else:
base_score = 0 # Неизвестная сложность, 0 очков

# Рассчитываем штрафы
time_penalty = time * 2
hint_penalty = 10 if hint_flag == 1 else 0

# Рассчитываем итоговое количество очков
total_score = base_score - time_penalty - hint_penalty

# Если очки отрицательные, начисляем 0
if total_score < 0:
total_score = 0

# Обновляем максимальное количество очков и имя участника
if participant_name not in participants_scores:
participants_scores[participant_name] = 0

participants_scores[participant_name] += total_score

# Находим участника с максимальным количеством очков
max_score = -1
winner_name = ""

for name, score in participants_scores.items():
if score > max_score:
max_score = score
winner_name = name

# Выводим имя победителя
print(winner_name)

Ответ: Иванов

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