ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 26003. Основная волна

Отбор кандидатов в матросы происходит по сумме баллов трех экзаменов. На заранее известное количество мест отбираются кандидаты, набравшие большую сумму баллов по результатам трех экзаменов. Все кандидаты, набравшие определенную сумму баллов или больше, зачисляются на имеющиеся места. Такой балл называется проходным. Если после заполнения имеющихся мест кандидатами с проходным баллом остаются незаполненные места, но кандидатов, набравших следующую сумму баллов, больше, чем вакантных мест, набранная этими кандидатами сумма баллов называется полупроходным баллом. Из числа кандидатов, набравших полупроходной балл, на имеющиеся места принимаются кандидаты, имеющие более высокий балл за собеседование, а при равенстве баллов за собеседование – приоритет имеют кандидаты с наименьшими ID.

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

Входные данные

В первой строке входного файла находится два числа N – количество кандидатов (натуральное число, не превышающее 1000) и S – количество имеющихся мест. Каждая из следующих N строк содержит пять чисел: ID кандидата (натуральное число, не превышающее 10 000), соответственно три оценки по экзаменам (все числа целые неотрицательные, не превышающие 100) и балл за собеседование (целое неотрицательное число, не превышающее 10).

Запишите в ответе два целых числа: сначала ID последнего кандидата с набранным проходным баллом, а затем количество кандидатов, набравшие полупроходной балл.

Типовой пример организации данных во входном файле

6 3
1 90 90 90 10
3 60 70 80 8
5 63 60 90 6
8 50 80 100 4
4 40 95 80 7
11 80 63 72 6

При таких входных данных проходной балл равен 230, полупроходной 215, на оставшееся одно место будет назначен кандидат, набравший в сумме 215 баллов и получивший по собеседованию 7 баллов. Ответ для приведённого примера: 8 2

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.

data = []
with open('2603.txt') as file:
    N, S = map(int, file.readline().split())

    for line in file:
        parts = line.strip().split()
        candidate = {
            "id"       : int(parts[0]),
            "exam1"    : int(parts[1]),
            "exam2"    : int(parts[2]),
            "exam3"    : int(parts[3]),
            "interview": int(parts[4])}

        candidate["result"] = candidate["exam1"] + candidate["exam2"] + candidate["exam3"]
        data.append(candidate)

# Сортируем по возрастанию ID (шаг 3)
stage_1 = sorted(data, key=lambda x: x["id"])
# Сортируем по убыванию баллов за интервью (шаг 2)
stage_2 = sorted(stage_1, key=lambda x: x["interview"], reverse=True)
# Сортируем по убыванию баллов (шаг 1)
stage_3 = sorted(stage_2, key=lambda x: x["result"], reverse=True)

half_pass_mark = stage_3[S]['result']

answer_1 = {}
answer_2 = 0

for candidate in stage_3:
    if candidate['result'] > half_pass_mark:
        answer_1 = candidate
    if candidate['result'] == half_pass_mark:
        answer_2 += 1
    if candidate['result'] < half_pass_mark:
        break

print(f'ID последнего кандидата: {answer_1['id']}')
print(f'Набрали полупроходной балл: {answer_2}')
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие