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

№ 26004. Демоверсия

Во время сессии студенты сдают 4 экзамена, за каждый из которых можно получить от 2 до 5 баллов. Студенты, получившие хотя бы одну «двойку», считаются не сдавшими сессию. Результаты сессии публикуются в виде рейтингового списка, в котором сначала указаны идентификационные номера студентов (ID), сдавших сессию, в порядке убывания среднего балла за сессию, а в случае равенства средних баллов – в порядке возрастания ID.
Затем располагаются ID студентов, не сдавших сессию: сначала – получивших одну «двойку», затем – две «двойки», потом ID студентов
с тремя «двойками» и, наконец, ID студентов, получивших по 2 балла за каждый из экзаменов. Если студенты имеют одинаковое количество «двоек», то их ID в рейтинге располагаются в порядке возрастания.
Повышенную стипендию получают студенты, занявшие в рейтинговом списке первые 25 % мест, при условии отсутствия у них «двоек». Гарантируется, что без «двоек» сессию сдали не менее 25 % студентов.
Найдите ID студента, который занимает последнее место среди студентов с повышенной стипендией, а также ID первого в рейтинговом списке студента, который имеет более двух «двоек».
В ответе запишите два целых положительных числа: сначала ID студента, который занимает последнее место среди студентов с повышенной стипендией, затем ID первого в рейтинговом списке студента, который имеет более двух «двоек».

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

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

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

Два натуральных числа: искомые ID студентов в порядке, указанном в условии задачи.

Типовой пример организации данных во входном файле
8
4 4 4 4 4
7 5 5 5 2
10 3 4 4 5
1 4 4 4 3
6 3 5 5 3
2 2 2 2 2
13 2 2 2 3
3 3 3 3 3

При таких исходных данных рейтинговый список ID имеет вид: 4 6 10 1 3 7 13 2. Ответ: 6 13.

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

import statistics

data = []
with open('2604.txt') as file:
    N = int(file.readline())

    for line in file:
        parts = line.strip().split()
        candidate = {
            "id" : int(parts[0]),
            "m_1": int(parts[1]),
            "m_2": int(parts[2]),
            "m_3": int(parts[3]),
            "m_4": int(parts[4])}
        marks = (candidate["m_1"], candidate["m_2"],
                 candidate["m_3"], candidate["m_4"])
        candidate["twos"] = marks.count(2)
        candidate["mean"] = statistics.mean(marks)
        data.append(candidate)

data = sorted(data, key=lambda x: (-x["mean"], x["twos"], x["id"]))

# Первая четверть студентов
quart = N // 4
answer_1 = data[quart - 1]["id"]
print(answer_1)

for candidate in data:
    if candidate["twos"] > 2:
        print(candidate["id"])
        break
Разберём это задание на бесплатном пробном занятии

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

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