Задание 26. Информатика. ЕГЭ. Статград. 17.12.2024
- Просмотры: 150
- Изменено: 18 января 2025
Участники викторины письменно отвечают на \(10\) вопросов различной сложности. За правильный ответ начисляется от \(1\) до \(5\) баллов в зависимости от сложности вопроса. За неверный ответ вычитается от \(1\) до \(5\) баллов. Участник может не отвечать на какой-то вопрос, в таком случае баллы за этот вопрос не начисляются.
По результатам викторины для каждого участника вычисляются три показателя:
- сумма – общее количество набранных баллов;
- плюсы – сумма баллов без учёта неверных ответов;
- ответы – общее количество сданных ответов (верных и неверных).
В таблице результатов участники располагаются по убыванию первого показателя – суммы, при равенстве сумм – по убыванию второго показателя (плюсов), при равенстве сумм и плюсов – по убыванию третьего показателя (ответов). При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров.
Дальнейший отбор проводится среди тех, кто набрал положительную сумму баллов, участники с нулевой и отрицательной суммой исключаются. В следующий тур проходят участники, занявшие места в первой трети полученной таблицы (учитываются только положительные результаты), а также те, у которых все три показателя такие же, как у занявшего последнее место в первой трети таблицы.
Право участия в дополнительном отборочном туре получают \(10\%\) из тех, кто набрал положительную сумму, но не попал сразу в следующий тур, а также те, у которых все три показателя такие же, как у занявшего последнее место среди этих \(10\%.\)
Примечание. Во всех случаях, когда вычисленное количество участников оказывается не целым, учитывается целая часть полученного числа.
Определите ID участника, занимающего в таблице первое место среди тех, кто прошёл в дополнительный отборочный тур, а также общее количество участников дополнительного отборочного тура.
Входные данные
Первая строка входного файла содержит целое число \(N\) (\(N \leqslant 10~000\)) – общее количество участников. Каждая из следующих \(N\) строк соответствует одному участнику и содержит \(11\) целых чисел, разделённых пробелами: сначала ID участника, затем – баллы, полученные им за каждый из \(10\) вопросов. Гарантируется, что ID участников не повторяются. В ответе запишите два целых числа: сначала требуемый ID, затем требуемое количество.
Решение:
Python
base = ''
fd = open(base + '26.txt')
N = int(fd.readline())
p = []
for line in fd:
a = [int(x) for x in line.split()]
if sum(a[1:]) > 0:
p.append([sum(a[1:]), sum(z > 0 for z in a[1:]),
sum(z != 0 for z in a[1:]), -a[0]])
p.sort(reverse=True)
N = len(p) # кол-во участников с положительной суммой
k = N // 3 # последний участник в первой трети таблицы
res = p[k][:3]
while res == p[k][:3]: # двигаем k на первого участника, не прошедшего сразу
k += 1
ID = -p[k][3]
rem = N - k
dop = int(0.1 * rem) # 10% от оставшихся
res = p[k - 1 + dop][:3]
while res == p[k - 1 + dop][:3]:
dop += 1
print(ID, dop - 1)
Ответ: \(35669 \,\, 478\)