Задание 26. Информатика. ЕГЭ. Статград. 24.10.2024-1

Просмотры: 101
Изменено: 24 ноября 2024

Участники викторины письменно отвечают на \(10\) вопросов различной сложности. За правильный ответ начисляется от \(1\) до \(5\) баллов в зависимости от сложности вопроса. За неверный ответ вычитается от \(1\) до \(5\) баллов. Участник может не отвечать на какой-то вопрос, в таком случае баллы за этот вопрос не начисляются.

По результатам викторины для каждого участника вычисляются три показателя:

  1. сумма – общее количество набранных баллов;
  2. плюсы – сумма баллов без учёта неверных ответов;
  3. ответы – общее количество сданных ответов (верных и неверных).

В таблице результатов участники располагаются по убыванию первого показателя – суммы, при равенстве сумм – по убыванию второго показателя (плюсов), при равенстве сумм и плюсов – по убыванию третьего показателя (ответов). При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров.

В следующий тур проходят участники, занявшие места в первой трети итоговой таблицы, а также те, у которых все три показателя такие же, как у занявшего последнее место в первой трети таблицы.

Определите ID участника, занимающего в таблице первое место среди тех, кто не прошёл в следующий тур, а также количество участников, у которых все три показателя такие же, как у участника, занявшего в итоговой таблице 1500 место (включая самого этого участника).

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

Первая строка входного файла содержит целое число \(N\) (\(N \leqslant 10 000\)) – общее количество участников. Каждая из следующих \(N\) строк соответствует одному участнику и содержит \(11\) целых чисел, разделённых пробелами: сначала ID участника, затем – баллы, полученные им за каждый из \(10\) вопросов. Гарантируется, что ID участников не повторяются.

В ответе запишите два целых числа: сначала требуемый ID, затем требуемое количество.

Файл с данными

Решение:

Python


base = ''

part = []
fd = open(base + '26.txt')
N = int(fd.readline())
for line in fd:
    tmp = [int(x) for x in line.split()]
    p = {'ID': -tmp[0],
         'sum': sum(tmp[1:]),
         'plus': sum(x for x in tmp[1:] if x > 0),
         'ans': sum(x != 0 for x in tmp[1:])}
    part.append(p)

part.sort(key=lambda x: (x['sum'], x['plus'], x['ans'], x['ID']), reverse=True)

N3 = N//3 - 1
curr = N3 + 1
while part[curr]['sum'] == part[N3]['sum'] \
      and part[curr]['plus'] == part[N3]['plus'] \
      and part[curr]['ans'] == part[N3]['ans']:
    curr += 1
q = 1
t = 1500
while part[t]['sum'] == part[1499]['sum'] \
      and part[t]['plus'] == part[1499]['plus'] \
      and part[t]['ans'] == part[1499]['ans']:
    q += 1
    t += 1
print(-part[curr]['ID'], q)

Ответ: \(4229 \,\, 5\)