Участники викторины отвечают на \(10\) вопросов, сложность которых оценивается числом от \(10\) до \(100.\) При удачном ответе на вопрос стоимостью \(Q\) участник получает \(Q\) баллов, при неправильном ответе на такой вопрос он получает \(Q\) штрафных баллов, которые вычитаются из результата. Участник может не отвечать на какие-то вопросы, при этом его сумма баллов не изменяется. Чтобы определить победителей, для каждого участника вычисляются три показателя:
В таблице результатов участники располагаются по убыванию суммы, при равенстве сумм – по возрастанию штрафов, при равенстве сумм и штрафов – по возрастанию пропусков. При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров. Победителями считаются \(20\%\) участников, показавших лучшие результаты, а также те, у которых все три показателя такие же, как у занявшего последнее место среди лучших \(20\%\) участников. Среди \(10\%\) лучших участников, не ставших победителями, но получивших положительную сумму, разыгрывается утешительный приз — автомобиль. Определите личный код участника, показавшего лучший результат среди тех, кто не стал победителем викторины, а также общую сумму баллов, набранную теми участниками, среди которых разыгран автомобиль. Если при определении количества участников получается не целое число, оно округляется до ближайшего меньшего целого.
Входные данные представлены в файле следующим образом. В первой строке входного файла записано натуральное число \(N,\) не превышающее \(10~000\) — количество участников викторины. Вторая строка содержит \(10\) чисел, разделённых пробелом: «стоимости вопросов». В каждой из следующих \(N\) строках через пробел записаны через пробел \(11\) чисел: сначала код участника, а затем \(10\) чисел, характеризующих ответы этого участника на вопросы \((1,\) если ответ верный; \(-1,\) если ответ неверный и \(0,\) если участник не отвечал на вопрос).
Запишите в ответе два числа: сначала личный код участника, показавшего лучший результат среди тех, кто не стал победителем викторины, а затем общую сумму баллов, набранную теми участниками, среди которых разыгран автомобиль.
Решение:
Python
fd = open('26.txt')
N = int(fd.readline())
points = [0] + [int(x) for x in fd.readline().split()]
part = []
for line in fd:
data = [int(x) for x in line.split()]
s, p, a = 0, 0, 0
for i in range(1, 11):
s += data[i] * points[i]
p += data[i] * points[i] if data[i] < 0 else 0
a += data[i] == 0
part.append((s, p, -a, -data[0]))
part.sort(reverse=True)
N5 = N // 5
t = part[N5 - 1][:3]
while part[N5][:3] == t:
N5 += 1
consol = [p for p in part[N5:] if p[0] > 0]
N10 = len(consol) // 10
print(-part[N5][3], sum(p[0] for p in consol[:N10]))
Ответ: \(2299 \,\, 36950\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене