Задание 26. Информатика. ЕГЭ. Статград. 24.10.2024-2
- Просмотры: 162
- Изменено: 24 ноября 2024
Участники викторины письменно отвечают на \(10\) вопросов различной сложности. За правильный ответ начисляется от \(1\) до \(5\) баллов в зависимости от сложности вопроса. За неверный ответ вычитается от \(1\) до \(5\) баллов. Участник может не отвечать на какой-то вопрос, в таком случае баллы за этот вопрос не начисляются.
По результатам викторины для каждого участника вычисляются три показателя:
- сумма – общее количество набранных баллов;
- плюсы – сумма баллов без учёта неверных ответов;
- ответы – общее количество сданных ответов (верных и неверных).
В таблице результатов участники располагаются по убыванию первого показателя – суммы, при равенстве сумм – по убыванию второго показателя (плюсов), при равенстве сумм и плюсов – по убыванию третьего показателя (ответов). При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров.
В следующий тур проходят участники, занявшие места в первой четверти итоговой таблицы, а также те, у которых все три показателя такие же, как у занявшего последнее место в первой четверти таблицы.
Определите ID участника, занимающего в таблице первое место среди тех, кто не прошёл в следующий тур, а также количество участников, у которых все три показателя такие же, как у участника, занявшего в итоговой таблице 1700 место (включая самого этого участника).
Входные данные
Первая строка входного файла содержит целое число \(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)
N4 = N//4 - 1
curr = N4 + 1
while part[curr]['sum'] == part[N4]['sum'] \
and part[curr]['plus'] == part[N4]['plus'] \
and part[curr]['ans'] == part[N4]['ans']:
curr += 1
q = 1
t = 1700
while part[t]['sum'] == part[1699]['sum'] \
and part[t]['plus'] == part[1699]['plus'] \
and part[t]['ans'] == part[1699]['ans']:
q += 1
t += 1
print(-part[curr]['ID'], q)
Ответ: \(1525 \,\, 4\)