Python

Помогите найти ошибку в задаче по Python

Для поступления в вуз абитуриент должен предъявить результаты трех экзаменов в виде ЕГЭ, каждый из них оценивается целым числом от 0 до 100 баллов. При этом абитуриенты, набравшие менее 40 баллов (неудовлетворительную оценку) по любому экзамену из конкурса выбывают. Остальные абитуриенты участвуют в конкурсе по сумме баллов за три экзамена.

В конкурсе участвует N человек, при этом количество мест равно K. Определите проходной балл, то есть такое количество баллов, что количество участников, набравших столько или больше баллов не превосходит K, а при добавлении к ним абитуриентов, набравших наибольшее количество баллов среди непринятых абитуриентов, общее число принятых абитуриентов станет больше K.

Формат ввода

Программа получает на вход количество мест K. Далее идут строки с информацией об абитуриентах, каждая из которых состоит из имени (текстовая строка содержащая произвольное число пробелов) и трех чисел от 0 до 100, разделенных пробелами.

Используйте для ввода файл input.txt с указанием кодировки utf8.

Формат вывода

Программа должна вывести проходной балл в конкурсе. Выведенное значение должно быть минимальным баллом, который набрал абитуриент, прошедший по конкурсу.

Также возможны две ситуации, когда проходной балл не определен.

Если будут зачислены все абитуриенты, не имеющие неудовлетворительных оценок, программа должна вывести число 0.

Если количество абитуриентов, имеющих равный максимальный балл больше чем K, программа должна вывести число 1.

Используйте для вывода файл output.txt с указанием кодировки utf8.
Тест 1
Входные данные:
5
Иванов Сергей 70 70 70
Сергеев Петр 100 100 0
Петров Василий 70 60 70
Васильев Андрей 70 60 70
Андреев Денис 100 30 100
Денисов Роман 50 50 50
Романов Иван 60 70 70
Ким Чен Ир 50 50 50
Ким Ир Сен 40 40 40

Вывод программы:
200

Тест 2
Входные данные:
1
Иванов Сергей 40 40 40
Сергеев Петр 100 100 39

Вывод программы:
0

Тест 3
Входные данные:
1
Иванов Сергей 60 60 60
Сергеев Петр 100 40 40

Вывод программы:
1

Код:

f = open('input.txt', 'r', encoding='utf8')
outFile = open('output.txt', 'w', encoding='utf8')
k = f.readline()
k = int(k)
rez = []
l = f.readlines()
for i in l:
__if len(i.split()) == 6:
____n1, n2, n3, s1, s2, s3 = i.split()
__if len(i.split()) == 5:
____n1, n2, s1, s2, s3 = i.split()

__if int(s1) >= 40 and int(s2) >= 40 and int(s3) >= 40:
____sum = int(s1) + int(s2) + int(s3)
__else:
____sum = 0
__rez.append(sum)
rez.sort(reverse=True)
if rez[k] == 0:
__print(0, file=outFile)
elif rez[0] == rez[k]:
__print(1, file=outFile)
elif rez[k] == rez[k - 1]:
__print(rez[k - 2], file=outFile)
else:
__print(rez[k - 1], file=outFile)
f.close()
outFile.close()

Анализатор выдает ошибку на 11-м тесте
Dima Salomahin
Dima Salomahin
82
Нужно предусмотреть вариант с одинаковым количеством баллов у абитуриентов с суммой, меньшей максимальной. Если количество мест 5, а суммы баллов у абитуриентов представлены списком [200 120 120 120 120 120], то выводим 200

f = open('input.txt', 'r', encoding='utf8')
outFile = open('output.txt', 'w', encoding='utf8')
k = f.readline()
# print(k)
k = int(k)
# print(k)
rez = []
l = f.readlines()
for i in l:
s1, s2, s3 = i.split()[-3:]
if int(s1) >= 40 and int(s2) >= 40 and int(s3) >= 40:
sum = int(s1) + int(s2) + int(s3)
else:
sum = 0
rez.append(sum)
rez.sort()
rez.reverse()
# print(rez)
# print(rez[k])
if rez[k] == 0:
print(0, file=outFile)
elif rez[0] == rez[k]:
print(1, file=outFile)
elif rez[k] == rez[k - 1]:
j = 1
while rez[k - j + 1] == rez[k - j]:
j += 1
print(rez[k - j], file=outFile)
else:
print(rez[k - 1], file=outFile)
f.close()
outFile.close()
Андрей Бурков
Андрей Бурков
483
Лучший ответ
Соловцов Сергей Спасибо! Но всё ранво проваливает тест, говорит, что неучтены случаи, когда сумма всех одинаковых баллов больше максимального ( у другого участника)
Kostya Rabotyagin Спасибо!
Можно еще написать так:

rez.sort(reverse=True) вместо
rez.reverse()
может я что то не понимаю но если 5 мест то на них претендуют:
Иванов Сергей 70 70 70 = 210 баллов
Сергеев Петр 100 100 0 = не проходит
Петров Василий 70 60 70 = 200 баллов
Васильев Андрей 70 60 70 = 200 баллов
Андреев Денис 100 30 100 = не проходит
Денисов Роман 50 50 50 = 150 баллов
Романов Иван 60 70 70 =200 баллов
Ким Чен Ир 50 50 50 = 150 баллов
Ким Ир Сен 40 40 40 = 120 баллов
итог- в списке претендентов 7 человек по баллам (210,200,200,150,200,150,120)
сортируем по убыванию и получаем [210, 200, 200, 200, 150, 150,120]
теперь оставляем 5 человек [210, 200, 200, 200, 150] согласно количеству мест К = 5
минимальный балл в списке 150. почему ответ 200 ???
Тест 1
Входные данные:
5
Вывод программы:
200 ???
Dima Salomahin Потому что 150 баллов получил и шестой, но он не проходит. Нужен гарантированный проходной балл
Иван Журавлев набравших столько или больше баллов не превосходит K,
В 7-10 строках ты рассматриваешь только 2 случая, когда имя абитуриента состоит из 2 или 3 слов. В формате ввода сказано, что там может быть любое количество пробелов, а значит, такая строка вызовет ошибку в программе:
Ким Чен Ир Сыр 50 50 100

Чтобы избежать ошибки, читай только 3 последних слова: i.split()[-3:]