Участники викторины письменно отвечают на 10 вопросов различной сложности. За правильный ответ начисляется от 1 до 5 баллов в зависимости от сложности вопроса. За неверный ответ вычитается от 1 до 5 баллов. Участник может не отвечать на какой-то вопрос, в таком случае баллы за этот вопрос не начисляются.
По результатам викторины для каждого участника вычисляются три показателя:
1) сумма — общее количество набранных баллов;
2) плюсы — сумма баллов без учёта неверных ответов;
3) ответы — общее количество сданных ответов (верных и неверных).
В таблице результатов участники располагаются по убыванию первого показателя — суммы, при равенстве сумм — по убыванию второго показателя (плюсов), при равенстве сумм и плюсов — по убыванию третьего показателя (ответов). При равенстве всех трёх показателей участники располагаются в итоговой таблице в порядке возрастания их личных номеров.
Дальнейший отбор проводится среди тех, кто набрал положительную сумму баллов, участники с нулевой и отрицательной суммой исключаются.
В следующий тур проходят участники, занявшие места в первой трети полученной таблицы (учитываются только положительные результаты), а также те, у которых все три показателя такие же, как у занявшего последнее место в первой трети таблицы.
Право участия в дополнительном отборочном туре получают 10% из тех, кто набрал положительную сумму, но не попал сразу в следующий тур, а также те, у которых все три показателя такие же, как у занявшего последнее место среди этих 10%.
Примечание. Во всех случаях, когда вычисленное количество участников оказывается не целым, учитывается целая часть полученного числа.
Определите ID участника, занимающего в таблице первое место среди тех, кто прошёл в дополнительный отборочный тур, а также общее количество участников дополнительного отборочного тура.
Входные данные.
Первая строка входного файла содержит целое число N (N ≤ 10 000) — общее количество участников. Каждая из следующих N строк соответствует одному участнику и содержит 11 целых чисел, разделённых пробелами: сначала ID участника, затем — баллы, полученные им за каждый из 10 вопросов.
Гарантируется, что ID участников не повторяются.
В ответе запишите два целых числа: сначала требуемый ID, затем требуемое количество.
Ответ:
Откроем файл с помощью редактора электронных таблиц.
В столбце L посчитаем сумму балов введя формулу =СУММ(B1:K1) и скопировав ее на весь диапазон.
В столбце М посчитаем сумму плюсов введя формулу =СУММЕСЛИ(B1:K1;">=0";B1:K1) и скопировав на весь диапазон.
В столбце N посчитаем количество ответов введя формулу =СЧЁТЕСЛИ(B1:K1;"<>0") и скопировав на весь диапазон.
Получи таблицу:
Отсортируем таблицу по условиям задачи:
Выделим участников, набравших положительную сумму баллов и скопируем список на отдельную таблицу. Всего участников 7145. Во второй тур проходят участники из первой трети таблицы. Всего в первой трети 2381 участник, плюс те, у кого результаты совпадают с 2381 участником.
ID участника, занимающего в таблице первое место среди тех, кто прошёл в дополнительный отборочный тур - 35669.
Скопируем участников (начиная с участника 35669), не прошедших в следующий тур, на отдельный лист.
Всего таких участников 4762, а 10% от этого количества 476 участников. А также 2 участника, с показателями как у последнего попавшего в отборочный тур.
Общее количество участников дополнительного отборочного тура 476 + 2 =478.
Ответ: 35669 и 478.
Приведём решение Юрия Красильникова на языке Python.
def fwd(scores,ndx):
s=scores[ndx][1:]
while s==scores[ndx][1:]: ndx+=1
return ndx
marks = sorted([list(map(int,s.split())) for s in open('26.txt')][1:])
scores = [[m[0],sum(m[1:]),sum([x for x in m[1:] if x > 0]), sum([x != 0 for x in m[1:]])] for m in marks]
scores = sorted([s for s in scores if s[1]>0],key=lambda x: x[1:],reverse=True)
t1=fwd(scores,len(scores)//3-1)
t2=fwd(scores,t1+(len(scores)-t1)//10)
print(scores[t1][0],t2-t1)

