Участники викторины отвечают на \(10\) вопросов, сложность которых оценивается числом от \(10\) до \(100.\) При удачном ответе на вопрос стоимостью \(Q\) участник получает \(Q\) баллов, при неправильном ответе на такой вопрос он получает \(Q\) штрафных баллов, которые вычитаются из результата. Участник может не отвечать на какие-то вопросы, при этом его сумма баллов не изменяется. Чтобы определить победителей, для каждого участника вычисляются три показателя:
В таблице результатов участники располагаются по убыванию суммы, при равенстве сумм – по возрастанию штрафов, при равенстве сумм и штрафов – по возрастанию пропусков. При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров. Победителями считаются участники, занявшие места в первой четверти итоговой таблицы, а также те, у которых все три показателя такие же, как у занявшего последнее место в первой четверти таблицы. Определите личный код участника, показавшего лучший результат среди тех, кто не стал победителем викторины, а также количество участников, у которых все три показателя такие же, как у участника, занявшего в итоговой таблице 1000 место (включая самого этого участника).
Входные данные представлены в файле следующим образом. В первой строке входного файла записано натуральное число \(N,\) не превышающее \(10~000\) — количество участников викторины. Вторая строка содержит \(10\) чисел, разделённых пробелом: «стоимости вопросов». В каждой из следующих \(N\) строках через пробел записаны через пробел \(11\) чисел: сначала код участника, а затем \(10\) чисел, характеризующих ответы этого участника на вопросы \((1,\) если ответ верный; \(-1,\) если ответ неверный и \(0,\) если участник не отвечал на вопрос).
Запишите в ответе два числа: сначала личный код участника, показавшего лучший результат среди тех, кто не стал победителем викторины, а затем количество участников, у которых все три показателя такие же, как у участника, занявшего в итоговой таблице \(1000\) место (включая самого этого участника).
Решение:
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)
N4 = N // 4
t = part[N4 - 1][:3]
while part[N4][:3] == t:
N4 += 1
t = part[999][:3]
arr = [p for p in part if p[:3] == t]
print(-part[N4][3], len(arr))
Ответ: \(4715 \,\, 8\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене