Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 26. Информатика. ЕГЭ. Поляков-7775
- Просмотры: 645
- Изменено: 11 мая 2025
Участники викторины отвечают на \(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\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


