Все статьи по ЕГЭ
6 сент. 2025 г. - 47 мин. чтения
ЕГЭ Задание 26

ЕГЭ Задание 26

Обработка целочисленной информации

@ashtana

Штана Альберт Игоревич

Типы заданий № 26

В этой статье будет разобрано задание 26.

Рассмотрим типовые задачи из двадцать шестого задания ЕГЭ по информатике.

Данное задание относится к высокому уровню сложности.

Время выполнения задания ≈ 35 минут.

Данное задание проверяет умение обрабатывать целочисленную информацию с использованием сортировки.

Задача 1

Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя. По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.

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

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

Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.

Пример входного файла:
100 4
80
30
50
40

При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар – 50, поэтому ответ для приведённого примера: 2 | 50

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

Решение
Решение Python
with open('26_1.txt', mode='r', encoding='utf8') as f:
    st = f.readline().split()
    s = int(st[0])
    n = int(st[1])
    a = [int(f.readline()) for _ in range(n)]
    a.sort()
    b = []
    for i in range(n):
        if sum(b) + a[i] <= s:
            b.append(a[i])
        else:
            break
    b = b[:-1]
    for i in range(len(a) - 1, -1, -1):
        if sum(b) + a[i] <= s:
            b.append(a[i])
            break
    print(len(b), b[-1])

Ответ: 568 | 50

Задача 2

В лесничестве саженцы сосны высадили параллельными рядами, которые пронумерованы идущими подряд натуральными числами. Растения в каждом ряду пронумерованы натуральными числами начиная с единицы. По данным аэрофотосъёмки известно, в каких рядах и на каких местах растения не прижились. Найдите ряд с наибольшим номером, в котором есть ровно 13 идущих подряд свободных мест для посадки новых сосен, таких, что непосредственно слева и справа от них в том же ряду растут сосны. Гарантируется, что есть хотя бы один ряд, удовлетворяющий этому условию. В ответе запишите два целых числа: наибольший номер ряда и наименьший номер места для посадки из числа найденных в этом ряду подходящих последовательностей из 13 свободных мест.

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

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

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

Два целых неотрицательных числа: наибольший номер ряда и наименьший номер места в выбранной последовательности из 13 мест, подходящих для посадки новых сосен.

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

7
40 3
40 7
60 33
50 125
50 129
50 68
50 72

Для приведённого примера, при условии, что необходимо 3 свободных места, ответом является пара чисел: 50; 69.

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

Решение
Решение Python
with open('26_2.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    tr = [[int(a.split()[0]), int(a.split()[1])] for a in f.readlines()]
    tr.sort()
    mx = 0
    mn = 0
    for i in range(1, len(tr)):
        if (tr[i][0] == tr[i - 1][0]) and (tr[i][1] - tr[i - 1][1] == 14):
            if tr[i][0] > mx:
                mx = tr[i][0]
                mn = tr[i - 1][1] + 1
    print(mx, mn)

Ответ:59966 | 50449

Задача 3

В магазине для упаковки подарков есть N кубических коробок. Самой интересной считается упаковка подарка по принципу матрёшки - подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д. Одну коробку можно поместить в другую, если длина её стороны хотя бы на 3 единицы меньше длины стороны другой коробки. Определите наибольшее количество коробок, которое можно использовать для упаковки одного подарка, и максимально возможную длину стороны самой маленькой коробки, где будет находиться подарок. Размер подарка позволяет поместить его в самую маленькую коробку.

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

В первой строке входного файла находится число N - количество коробок в магазине (натуральное число, не превышающая 10 000). В следующих N строках находятся значения длин сторон коробок (все числа натуральные, не превышающие 10 000), каждое - в отдельной строке.

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

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

5
43
40
32
40
30

Пример входного файла приведён для пяти коробок и случая, когда минимальная допустимая разница между длинами сторон коробок, подходящих упаковки "матрёшки", составляет 3 единицы.

При таких исходных данных условию задачи удовлетворяют наборы коробок с длинами сторон 30, 40 и 43 или 32, 40 и 43 соответственно, т.е. количество коробок равно 3, а длина стороны самой маленькой коробки равна 32.

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

Решение
Решение Python
with open('26_3.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    a = [int(f.readline()) for _ in range(n)]
    a.sort(reverse=True)
    k = 1
    p = a[0]
    for i in range(1, len(a)):
        if p - a[i] >= 3:
            k += 1
            p = a[i]
    print(k, p)

Ответ:2767 | 51

Задача 4

На закупку товаров типов A, B, C, D и E выделена определённая сумма денег. Эти товары есть в продаже по различной цене. Необходимо на выделенную сумму закупить как можно больше товаров пяти типов (по общему количеству). Если можно разными способами купить максимальное количество пяти типов товаров, то нужно выбрать способ, при котором будет закуплено как можно больше товаров типа A. Если при этих условиях есть несколько способов закупки, нужно потратить как можно меньше денег. Определите, сколько будет закуплено товаров типа A и сколько денег останется.

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

Первая строка входного файла содержит два целых числа: N – общее количество товаров и M – сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк содержит целое число (цена товара в рублях) и символ (латинская буква), определяющий тип товара. Все данные в строках входного файла отделены одним пробелом. Запишите в ответе два числа: сначала количество закупленных товаров типа A, затем оставшуюся неиспользованной сумму денег.

Пример входного файла:

6 110
40 E
50 A
50 D
30 C
20 B
10 A

В данном случае можно купить не более четырёх товаров, из них не более двух товаров типа A. Минимальная цена такой покупки 110 рублей (покупаем товары 10 A, 20 B, 30 C, 50 A). Останется 0 рублей. Ответ: 2 0.

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

Решение
Решение Python
with open('26_4.txt', mode='r', encoding='utf8') as f:
    s = f.readline().split()
    n = int(s[0])
    m = int(s[1])
    X = [[int(a.split()[0]), a.split()[1]] for a in f.readlines()]
    X.sort()
    Y, Z = [], []
    sm = 0
    for i in range(n):
        if sm + X[i][0] <= m:
            sm += X[i][0]
            Y.append(X[i])
        else:
            if X[i][1] == 'A':
                Z.append(X[i])
    j = 0
    for i in range(len(Y) - 1, -1, -1):
        if Y[i][1] == 'A':
            continue
        if sm - Y[i][0] + Z[j][0] <= m:
            sm = sm - Y[i][0] + Z[j][0]
            Y[i] = Z[j]
        else:
            break
        j += 1
    k = 0
    for i in range(len(Y)):
        if Y[i][1] == 'A':
            k += 1
    print(k, m - sm)

Ответ:35 | 44

Задача 5

Предприятие производит оптовую закупку изделий A и C, на которую выделена определённая сумма денег. У поставщика есть в наличии партии этих изделий различных модификаций по различной цене. На выделенные деньги необходимо приобрести как можно больше изделий C (независимо от модификации). Закупать можно любую часть каждой партии. Если у поставщика закончатся изделия C, то на оставшиеся деньги необходимо приобрести как можно больше изделий A. Известна выделенная для закупки сумма, а также количество и цена различных модификаций данных изделий у поставщика. Необходимо определить, сколько будет закуплено изделий A и какая сумма останется неиспользованной. Если возможно несколько вариантов решения (с одинаковым количеством закупленных изделий A), нужно выбрать вариант, при котором оставшаяся сумма максимальна.

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

Пример входного файла:

4 1000
A 14 12
C 30 7
A 40 24
C 50 15

В данном случае сначала нужно купить изделия C: 7 изделий по 30 рублей и 15 изделий по 50 рублей. На это будет потрачено 960 рублей. На оставшиеся 40 рублей можно купить 2 изделия A по 14 рублей. Таким образом, всего будет куплено 2 изделия A и останется 12 рублей. В ответе надо записать числа 2 и 12.

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

Решение
Решение Python
with open('26_5.txt', mode='r', encoding='utf8') as f:
    st = f.readline().split()
    n = int(st[0])
    s = int(st[1])
    k = 0
    a = []
    for _ in range(n):
        st = f.readline().split()
        if st[0] == 'A':
            st[0] = 'D'
        if st[0] == 'C':
            st[0] = 'B'
        a.append((st[0], int(st[1]), int(st[2])))
    a.sort(key=lambda d: (d[0], d[1]))
    for i in range(len(a)):
        for j in range(a[i][2]):
            if s - a[i][1] >= 0:
                s -= a[i][1]
                if a[i][0] == 'D':
                    k += 1
    print(k, s)

Ответ:7354 | 111

Задача 6

В текстовом файле записан набор натуральных чисел, не превышающих 109. Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле, и чему равно наибольшее из средних арифметических таких пар.

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

Первая строка входного файла содержит целое число N — общее количество чисел в наборе. Каждая из следующих N строк содержит одно число. В ответе запишите два целых числа: сначала количество пар, затем наибольшее среднее арифметическое.

Пример входного файла:

6
3
8
14
11
2
17

В данном случае есть две подходящие пары: 8 и 14 (среднее арифметическое 11), 14 и 2 (среднее арифметическое 8). В ответе надо записать числа 2 и 11.

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

Решение
Решение Python
with open('26_6.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    k = 0
    mx = 0
    a = [int(f.readline()) for _ in range(n)]
    a.sort()
    for i in range(0, len(a) - 1):
        if a[i] % 2 == 0:
            for j in range(i + 1, len(a)):
                if a[j] % 2 == 0:
                    sr = (a[i] + a[j]) // 2
                    l = 0
                    r = len(a) - 1
                    index = 0
                    while l <= r:
                        index = (r + l) // 2
                        if a[index] == sr:
                            k += 1
                            mx = max(mx, a[index])
                            break
                        if a[index] < sr:
                            l = index + 1
                        else:
                            r = index - 1
    print(k, mx)

Ответ:15 | 976339247

Задача 7

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

Определите, какое максимальное количество мероприятий можно провести, и самое позднее время окончания последнего мероприятия (в минутах).

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

В первой строке входного файла находится натуральное число N (N < 1000) - количество заявок. Следующие N строк содержат пары чисел, обозначающих время начала и время окончания мероприятий. Числа натуральные, не превышающие 1440. В ответ дайте два числа: максимальное количество мероприятий и самое позднее время окончания последнего мероприятия (в минутах).

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

5
10 150
100 110
131 170
131 180
120 130

При таких исходных данных можно провести максимум три мероприятия, например, мероприятия по заявкам 2, 3 и 5. Самое позднее время окончания последнего мероприятия будет равно 180 минутам, если состоятся мероприятия по заявкам 2, 4, 5.

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

Решение
Решение Python
with open('26_7.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    a = [[int(a.split()[0]), int(a.split()[1])] for a in f.readlines()]
    a.sort(key=lambda x: x[1])
    gr = 0
    gr2 = 0
    k = 0
    mx = 0
    for i in range(n):
        if a[i][0] >= gr:
            gr2 = gr
            gr = a[i][1]
            k += 1
    for i in range(n):
        if a[i][0] >= gr2:
            mx = max(mx, a[i][1])
    print(k, mx)

Ответ:49 | 1430

Задача 8

На производстве штучных изделий имеется N деталей, которые требуют шлифовки и окрашивания. У каждой детали известны временные затраты на шлифовку и окрашивание. Детали пронумерованы, начиная с единицы. В процессе обработки деталей не предусмотрена возможность параллельной работы. На транспортной ленте имеется N мест для каждой детали.

На транспортной ленте детали располагаются по следующему правилу:

  1. Для N деталей имеется 2N чисел, которые обозначают время окрашивания и время шлифовки каждой детали. Эти 2N чисел сортируются по возрастанию.
  2. Если минимальное число в упорядоченном списке представляет время шлифовки конкретной детали, то данную деталь размещают на транспортной ленте на первое свободное место, начиная от её начала.
  3. Если минимальное число в упорядоченном списке представляет время окрашивания конкретной детали, то данную деталь размещают на транспортной ленте на первое свободное место, начиная от её конца.

Если попадается число уже рассмотренной детали, то его игнорируют. Все N деталей последовательно размещаются на транспортной ленте с помощью данного алгоритма. Определите номер последней детали, для которой будет определено её место на транспортной ленте, и количество деталей, которые будут отшлифованы до неё.

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

В первой строке входного файла находится натуральное число N (N < 1000), которое обозначает количество деталей. Следующие N строк содержат пары чисел, обозначающих соответственно время шлифовки и время окрашивания каждой детали. Все числа являются натуральными и различными.

Запишите в ответе два натуральных числа: сначала номер последней детали, для которой будет определено место на транспортной ленте, затем количество деталей, которые будут отшлифованы до неё.

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

5
30 50
100 155
150 170
10 160
120 55

При таком входном файле расположение деталей на транспортной ленте будет следующим: 4, 1, 2, 3, 5. Последней займёт своё место на ленте деталь под номером 3. До неё будет отшлифовано 3 детали.

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

Решение
Решение Python
with open('26_8.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    a = []
    c = []
    for i in range(1, n + 1):
        st = f.readline().split()
        a.append((int(st[0]), 0, i))
        a.append((int(st[1]), 1, i))
    a.sort()
    k = 0
    end = 0
    for i in range(2 * n):
        if not (a[i][2] in c):
            c.append(a[i][2])
            if a[i][1] == 0:
                k += 1
                end = 1
            else:
                end = 0
    print(c[-1], k - end)

Ответ:186 | 521

Задача 9

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

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

В первой строке входного файла находится натуральное число N (N < 10000) - количество посетителей магазина. Следующие n строк содержат пары чисел, обозначающих соответственно время входа и время выхода посетителя (все числа натуральные и не превышают 1440).

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

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

6
10 50
100 150
110 155
120 160
130 170
151 170

При таких исходных данных было два временных отрезка, где было максимальное количество посетителей. Со 130 минуты по 150 минуты и со 151 минуты по 155 минуты. Максимальное количество посетителей в эти временные отрезки равно 4.

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

Решение
Решение Python
with open('26_9.txt', mode='r', encoding='utf8') as f:
    n = int(f.readline())
    b = [0] * 1441
    for i in range(n):
        st = f.readline().split()
        b[int(st[0])] += 1
        b[int(st[1])] -= 1
    k = 0
    kmax = 0
    for i in range(1441):
        k += b[i]
        kmax = max(kmax, k)
    last_k = 0
    count = 0
    k = 0
    km = 0
    for i in range(1441):
        last_k = k
        k += b[i]
        if k == kmax and last_k < kmax:
            count += 1
        km = max(km, k)
    print(count, km)

Ответ:4 | 3535

Задача 10 (Демоверсия ЕГЭ 2024)

Входной файл содержит сведения о заявках на проведение мероприятий в конференц-зале. В каждой заявке указаны время начала и время окончания мероприятия (в минутах от начала суток). Если время начала одного мероприятия меньше времени окончания другого, то провести можно только одно из них. Если время окончания одного мероприятия совпадает со временем начала другого, то провести можно оба. Определите, какое максимальное количество мероприятий можно провести в конференц-зале и каков при этом максимально возможный перерыв между двумя последними мероприятиями.

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

В первой строке входного файла находится натуральное число N (N ≤ 1000) – количество заявок на проведение мероприятий. Следующие N строк содержат пары чисел, обозначающих время начала и время окончания мероприятий. Каждое из чисел натуральное, не превосходящее 1440.

Запишите в ответе два числа: максимальное количество мероприятий и самый длинный перерыв между двумя последними мероприятиями(в минутах).

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

5
10 150
100 120
131 170
150 180
120 130

При таких исходных данных можно провести максимум три мероприятия, например, мероприятия по заявкам 2, 3 и 5. Максимальный перерыв между двумя последними мероприятиями составит 20 мин., если состоятся мероприятия по заявкам 2, 4 и 5.

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

Решение
Решение Python
with open('26_11.txt', mode='r', encoding='utf8') as f:
    # Считываем строку из файла в переменную
    n = int(f.readline())  # Количество заявок
    a = []  # Список со временем начала и конца каждого из мероприятий
    # До конца дочитаем файл и заполняем список кортежами
    for i in range(n):
        st = f.readline().split()
        a.append((int(st[0]), int(st[1])))
    # Сортируем кортежи по времени окончания
    a.sort(key=lambda x: x[1])
    gr = 0  # Время окончания последнего мероприятия
    gr2 = 0  # Время окончания предпоследнего мероприятия
    k = 0  # переменная для максимального количества мероприятий
    mx_end = 0
    # Максимальное количество, перебираем все мероприятия
    for tt in a:
        if tt[0] >= gr:
            gr2 = gr  # Окончание предпоследнего выбранного элемента
            gr = tt[1]
            k += 1
    # Максимальное время начала последнего элемента при максимальном количестве
    for tt in a:
        if tt[0] >= gr2:
            mx_end = max(mx_end, tt[0])
    print(k, mx_end - gr2)

Ответ:32 | 15

Задача 11 (Демоверсия ЕГЭ 2025)

Во время сессии студенты сдают 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.

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

Решение
Решение Python
with open('26_11.txt', mode='r', encoding='utf8') as f:
    # Считываем строку из файла в переменную
    N = int(f.readline())  # Количество студентов
    X = int(0.25 * N)  # Количество бюджетных мест
    a1 = []  # Список с ID и оценками студентов претендующих на стипендию
    a2 = []  # Список с ID и оценками студентов получивших две и более двойки
    # До конца дочитаем файл и заполняем списки
    for i in range(N):  # Перебор всех ID студентов и их оценок
        st = f.readline().split()  # Считываем очередную строку с ID и оценками
        if st[1:].count('2') > 2:  # Если двоек больше двух то в список двоечников
            a2.append(int(st[0]))  # Пишем туда ID
        sb = 0  # Переменная для среднего балла по оценкам
        if st[1:].count('2') == 0:  # Если двоек нет
            for mark in st[1:]:  # Перебор оценок
                sb += int(mark)  # Складываем все оценки
            sb = sb / len(st[1:])  # Делим на их количество - получается средний балл
            a1.append((int(st[0]), sb))  # Добавляем ID студента и его средний балл
    # Сортируем список студентов, которые претендуют на повышенную стипендию по убыванию среднего балла и возрастания ID
    a1.sort(key=lambda x: (-x[1], x[0]))
    # Сортируем двоечников просто по возрастанию ID
    a2.sort()
    id1 = a1[X-1][0]  # ID студента, который занимает последнее место среди студентов с повышенной стипендией
    id2 = a2[0]  # ID первого в рейтинговом списке студента, который имеет более двух «двоек»
    print(id1, id2)  # Выводим ответ в консоль

Ответ:52326 | 635

Задача 12 (Демоверсия 2026)

Отдел маркетинга сети магазинов составляет рейтинг продуктов по информации об их сроках хранения с момента изготовления и после вскрытия упаковки. Для каждого продукта известен срок его хранения с момента изготовления и срок годности к употреблению после вскрытия упаковки. Продукты пронумерованы начиная с единицы. В рейтинговом списке маркетологи располагают продукты по следующему алгоритму:

  • все 2N чисел, обозначающих срок хранения и срок годности к употреблению для N продуктов, упорядочивают по возрастанию;
  • если минимальное число в этом упорядоченном списке – срок хранения, то продукт в рейтинге занимает первое свободное место от его начала;
  • если минимальное число – срок годности к употреблению, то продукт занимает первое свободное место от конца рейтинга;
  • если число обозначает срок хранения или срок годности к употреблению уже рассмотренного продукта, то его не принимают во внимание.

Этот алгоритм применяется последовательно для размещения всех N продуктов. Определите номер последнего продукта, для которого будет определено его место в рейтинге, и количество продуктов, которые займут в рейтинге более низкие места.

Входные данные В первой строке входного файла находится натуральное число N (N ≤ 1000) – количество продуктов. Следующие N строк содержат пары чисел, обозначающих соответственно срок хранения продукта с момента изготовления и срок годности к употреблению после вскрытия упаковки(все числа натуральные, различные). Запишите в ответе два натуральных числа: сначала номер последнего продукта, для которого будет определено его место в рейтинге, затем – количество продуктов, которые займут в рейтинге более низкие места.

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

5
30 50
100 155
150 170
10 160
120 55 \

При таких исходных данных порядок расположения продуктов в рейтинге следующий: 4, 1, 2, 3, 5. Последним займёт своё место в рейтинге продукт 3. При этом один продукт займёт в рейтинге более низкое место

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

Решение
Решение Python

Так как вопрос задачи в том, чтобы определить последний номер продукта попавшего в рейтинг и остальное количество продуктов низкого рейтинга. То смысл задачи простой(не нужно ничего сортировать и нам подойдут два списка вместо одного общего) в том, чтобы перебирать пары чисел(срок хранения и срок годности продукта) и проверять если первое число(срок хранения) меньше чем второе число(срок годности), то сохраняем его в первый список, иначе во второй список. Получится что продукты, которые ещё не испортились(срок хранения меньше срока годности), всегда будут выше в рейтинге и останутся в первом списке. Первый список для ответа на вопрос задания нам больше не пригодится. И наконец, после заполнения обоих списков, просто посмотрим по второму списку на максимальный срок годности и количество элементов в нём за минусом продукта, который последним бы попал в рейтинг.

with (open('26_2026.txt') as f):
    # Считываем строку из файла в переменную
    N = int(f.readline())  # Количество продуктов
    up_rating = []  # Список для продуктов которые попадают в начало рейтинга
    d_rating = [] # Список для продуктов которые попадают в конец рейтинга
    ss = []
    for i in range(1, N + 1):  #  Будем перебирать все пары начиная с порядкового номера (i) = 1
        s_hg = f.readline().split()  # считываем следующую строку и разбиваем строку на подстроки
        s_h, s_g = int(s_hg[0]), int(s_hg[1]) # сделаем из подстрок числа
        if s_h <= s_g:  # срок хранения меньше срока годности, то продукт в рейтинге занимает первое свободное место в рейтинговом списке от его начала
            up_rating.append([s_h, i])  # для решения задачи нам этот список не пригодится
        else:
            d_rating.append([s_g, i])  # для всех продуктов, которые попадают в конец рейтинга(незабываем сохранить изначальный порядковый номер)
    print(f"Номер последнего продукта попавшего в рейтинг: {max(d_rating)[1]}, количество продуктов которые займут более низкие места(за минусом последнего): {len(d_rating) - 1}")

Ответ: 564 | 444