Задание 26 ЕГЭ по информатике 2027: сортировка и жадный выбор
- Раздел
- Алгоритмы и программирование
- Максимальный балл
- 2 балла
- Уровень
- высокий
- Что проверяет
- Умение обрабатывать целочисленную информацию с использованием сортировки
- Что нужно сделать
- Написать программу: обработать данные из файла с сортировкой и жадным выбором и найти два числа.
- Как записать ответ
- два числа в две клетки таблицы ответа, в порядке из условия
- Время
- Около 35 минут по обобщённому плану ФИПИ
- Элемент кодификатора
- 3.10
- Компьютер
- Нужна программа или электронная таблица: на станции КЕГЭ — среды программирования на C#, C++, Pascal, Java, Python и редактор таблиц
- Файл к заданию
- текстовый файл .txt — его читает программа
- В 2026 году
- Тоже задание 26
Задание 26 ЕГЭ по информатике 2027 года проверяет, по формулировке обобщённого плана ФИПИ, «умение обрабатывать целочисленную информацию с использованием сортировки». Это задание высокого уровня с приложенным файлом: нужно написать программу, которая обработает журнал или последовательность объектов и найдёт два числа. Формат файла зависит от сюжета: у журнала сервера первая строка — количество записей N и вместимость раздела памяти K в Кбайт, дальше строки «время, идентификатор клиента, объём»; у упаковки товаров — количество товаров и вместимость коробки, дальше по одному числу в строке; у расписания — количество заявок, дальше два времени в формате ЧЧ:ММ:СС.
Задание требует специализированного ПО и оценивается в 2 балла: 26 и 27 — единственные задания работы, за которые ставят больше одного балла. В 2027 году правило частичного балла уточнили: «если в ответе на задания 26, 27 верные числа в ячейках таблицы перепутаны местами или в ячейках таблицы на верном месте присутствует только одно верное число (второе неверно или отсутствует), ставится 1 балл». В 2026 году для задания 26 достаточно было наличия одного верного числа в любом из полей; теперь оно должно стоять на своём месте. По обобщённому плану ФИПИ на задание отводится около 35 минут.
Тема и формат файла в 2027 году не изменились: в спецификации сказано, что «изменения структуры КИМ отсутствуют», а среди заданий 10, 13 и 23 с новой тематикой задание 26 не названо. При этом 26 остаётся одним из самых трудных мест работы: средний процент выполнения в 2026 году — 5,6, а методические рекомендации ФИПИ приводят разбивку «группа 3 на 1 балл – 2,4 %, 2 балла – 0,75 %; группа 4 на 1 балл – 16,6 %, 2 балла – 20,0 %».
Ниже — три типа задания с разбором и решением на Python; код можно запустить прямо на странице на файле примера. Разбор демоверсии 2027 года и типичные ошибки — в конце, тренажёр с заданиями банка — сразу под этим текстом.
Тренажёр задания 26
Десять заданий номера 26 из банка тренажёра — с файлами, как на станции КЕГЭ. Решайте в песочнице Python прямо на странице или у себя; ответ проверяется по ключу, после проверки — верный ответ, разбор и решение на Python, а при ошибке — разбор от ИИ. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.
Задание 26 вместе с остальными — в вариантах целиком.
Типы задания 26 с решением
Резервные копии раздела памяти сервера
В файле — журнал работы сервера: в первой строке количество записей N и вместимость специального раздела памяти K в Кбайт, в каждой следующей строке время регистрации в формате ЧЧ:ММ:СС, идентификатор клиента и объём данных запроса. Нужно найти идентификатор клиента с наибольшим суммарным объёмом переданных данных (при равенстве — наименьший) и сумму двух наибольших резервных копий, созданных не позднее 11:59:59. Это тип задания из демоверсии 2027 года.
7 100 01:00:00 11 40 02:00:00 22 30 03:00:00 11 50 04:00:00 22 60 05:00:00 33 70 06:00:00 11 20 12:30:00 44 90
Для этого примера ответ — 11 130.
Задание выполняется с использованием прилагаемого файла
1. Первую строку читаем отдельно: N — число записей, K — вместимость раздела. 2. Ведём used — объём данных в разделе сейчас — и словарь сумм по клиентам; сумму накапливаем на каждой строке. 3. Если used + S > K, свободной памяти не хватает: объём used уходит в список копий (при времени не позже 11:59:59), раздел обнуляется, и только потом прибавляется объём запроса. 4. В конце берём клиента с наибольшей суммой (при равенстве — наименьший идентификатор) и сумму двух наибольших копий.
На примере: 40 и 30 Кбайт занимают раздел до 70; запрос на 50 не помещается — копия 70; раздел 50 + 60 снова переполняется — копия 50; запрос на 70 даёт копию 60. Две наибольшие копии — 70 и 60, их сумма 130. По клиентам: 11 передал 110 Кбайт, 22 — 90, 33 — 70, 44 — 90 — ответ 11 130.
import heapq
from collections import Counter
with open('26.txt') as f:
n, k = map(int, f.readline().split())
total = Counter() # суммарный объём данных по клиентам
copies = [] # объёмы копий, созданных не позднее 11:59:59
used = 0 # сколько данных лежит в разделе сейчас
for _ in range(n):
t, c, s = f.readline().split()
c, s = int(c), int(s)
total[c] += s
if used + s > k: # запрос не помещается целиком
if t <= '11:59:59': # время копии не позже 11:59:59
copies.append(used)
used = 0 # раздел освобождён, запрос начнётся в пустом
used += s
# при равных суммах нужен наименьший идентификатор
best = max(total, key=lambda c: (total[c], -c))
print(best, sum(heapq.nlargest(2, copies)))
Ответ на приложенном файле: 2055 354545
Упаковка товаров в коробки заданной вместимости
В файле — массы товаров: в первой строке количество товаров N и вместимость коробки K в килограммах, дальше в каждой строке одно число. Товары берут по одному в порядке файла и укладывают в текущую коробку, пока очередной помещается; как только не помещается — коробку закрывают, берут новую и кладут товар уже в неё. Запишите, сколько коробок понадобится и какова суммарная масса двух самых тяжёлых коробок.
7 50 20 15 25 30 10 40 5
Для этого примера ответ — 4 85.
Задание выполняется с использованием прилагаемого файла
1. Из первой строки читаем N и K, дальше — по одному числу. 2. Держим массу текущей коробки load: если load + w > K, коробку закрывают (масса уходит в список), а товар кладут в новую. 3. Помещающийся товар просто прибавляется к load. 4. После последней строки закрываем последнюю коробку и добавляем её массу. 5. В ответ идут количество коробок и сумма двух наибольших масс.
На примере: товары 20 и 15 образуют коробку массой 35; товар 25 в неё не входит — начинается новая коробка, но в неё сразу же не помещается товар 30, поэтому коробку с массой 25 закрывают, а товар 30 кладут в следующую; вместе с товаром 10 эта коробка весит 40, а товар 40 её закрывает; последняя коробка — 40 + 5 = 45. Массы коробок 35, 25, 40, 45 — ответ 4 85.
with open('26.txt') as f:
n, k = map(int, f.readline().split())
weights = [int(f.readline()) for _ in range(n)]
boxes = [] # массы уже закрытых коробок
load = 0 # масса текущей коробки
for w in weights:
if load + w > k: # товар не помещается — коробку закрываем
boxes.append(load)
load = 0
load += w
boxes.append(load) # последняя коробка тоже закрывается
boxes.sort(reverse=True)
print(len(boxes), boxes[0] + boxes[1])
Ответ на приложенном файле: 410 3892
Расписание: наибольшее число непересекающихся заявок
В файле — заявки одного исполнителя: в первой строке их количество N, дальше в каждой строке время начала и время окончания в формате ЧЧ:ММ:СС. Заявки рассматривают в порядке возрастания времени окончания и принимают каждую, время начала которой не меньше времени окончания последней принятой. Запишите количество принятых заявок и их суммарную длительность в секундах.
6 08:00:00 09:00:00 08:30:00 08:45:00 08:50:00 10:00:00 09:30:00 10:30:00 10:15:00 11:00:00 10:45:00 11:30:00
Для этого примера ответ — 3 7800.
Задание выполняется с использованием прилагаемого файла
1. Из первой строки читаем N, дальше — пары времён; каждое переводим в секунды: часы × 3600 + минуты × 60 + секунды. 2. Сортируем заявки по времени окончания: раньше заканчивающаяся заявка оставляет больше времени на следующие, поэтому такой выбор принимает наибольшее число заявок. 3. Держим момент освобождения busy; заявку принимаем, если её начало не меньше busy, и сдвигаем busy к её окончанию. 4. Печатаем число принятых заявок и их суммарную длительность.
На примере: первой принимается заявка 08:30:00–08:45:00; заявка 08:00:00–09:00:00 отбрасывается; далее подходят 08:50:00–10:00:00 и 10:15:00–11:00:00. Принято 3 заявки, длительности 900 + 4200 + 2700 = 7800 секунд.
with open('26.txt') as f:
n = int(f.readline())
jobs = [f.readline().split() for _ in range(n)]
def to_seconds(t):
h, m, s = map(int, t.split(':'))
return h * 3600 + m * 60 + s
# упорядочиваем заявки по моменту окончания
intervals = sorted(((to_seconds(a), to_seconds(b)) for a, b in jobs),
key=lambda p: p[1])
count = 0 # сколько заявок принято
total = 0 # их суммарная длительность в секундах
busy = 0 # когда освободится исполнитель
for start, end in intervals:
if start >= busy: # заявка не пересекается с принятыми
count += 1
total += end - start
busy = end
print(count, total)
Ответ на приложенном файле: 121 46529
Шаблон кода на Python
Сортировка и жадный выбор
В первой строке файла — ограничение и число записей. Сортируете по возрастанию и берёте подряд, пока влезает; второй ответ — замена последнего взятого на самый большой, который ещё влезает.
with open('26.txt') as f:
s, n = map(int, f.readline().split())
a = sorted(int(f.readline()) for _ in range(n))
count = total = 0
for x in a:
if total + x > s:
break
total += x
count += 1
free = s - (total - a[count - 1]) # место без последнего взятого
biggest = max(x for x in a[count - 1:] if x <= free)
print(count, biggest)Файл-пример 26.txt
100 6 40 15 30 25 60 10
4 40
Как выполнять задание
- Сохраните файл задания в рабочую папку и откройте его по имени, например open('26.txt'). Первую строку читайте отдельно: в ней параметры N и K, а не данные.
- Разберитесь, что в строке служит разделителем. У журнала сервера и у расписания это пробел, поэтому читайте через line.split(); у упаковки в строке одно число, и хватит int(line).
- Решите, что копится по ходу одного прохода: текущий объём раздела, масса открытой коробки, время освобождения исполнителя. Второй проход по файлу на миллион строк не нужен.
- Отдельно заведите сборщики ответа: словарь сумм по идентификаторам, список найденных копий, счётчик и общую длительность. В конце возьмите из них максимум и две наибольшие величины.
- Проверьте программу на типовом примере из условия: она должна напечатать названный там ответ. Только после этого запускайте её на файле задания.
- Ответ — два целых числа через пробел, в порядке из условия. За перепутанные числа поставят только 1 балл.
Что нужно знать
- Один проход с накоплением. По файлу идём слева направо и держим небольшое состояние: у сервера — объём данных в разделе, у упаковки — масса открытой коробки, у расписания — время освобождения исполнителя.
- Жадный выбор. «Брать, пока помещается» и «принимать заявку, не пересекающуюся с предыдущей» оптимальны: порядок объектов задан, и выбор в каждой точке единственный.
- Сброс и фиксация. При переполнении сначала закрывается текущий объект: накопленная сумма уходит в список, и только потом начинается новый. Копия создаётся перед запросом, который не помещается.
- Сравнение времён. Строки «ЧЧ:ММ:СС» одинаковой длины с ведущими нулями сравниваются как текст; для длительности время переводят в секунды: часы × 3600 + минуты × 60 + секунды.
- Два ответа из одного прохода. По ходу набирают всё нужное: словарь сумм, список найденных объектов, счётчик. Второй раз файл не читают.
Как оценивается
Проверка автоматическая, по ключу: ответ должен быть записан в форме из условия и полностью совпасть с эталоном. Код и черновики не проверяют — значение имеет только ответ. За верный ответ — 2 балла. 1 балл ставят, если верные числа перепутаны местами или на своём месте стоит только одно верное число.
Критерии всех заданий экзамена — на странице критериев ЕГЭ.
Разбор задания демоверсии 2027
В демоверсии 2027 года дан журнал работы сервера demo_26.txt: в первой строке 15 001 запись и вместимость раздела 26 107 Кбайт. Спрашивают идентификатор клиента с наибольшим суммарным объёмом данных и сумму двух наибольших резервных копий раздела, созданных не позднее 11:59:59. Ключ ФИПИ на этом файле — 7040 52204.
Разберём типовой пример из условия: восемь запросов при K = 140 000 Кбайт. Запросы на 20 000 и 110 000 Кбайт занимают раздел до 130 000. Запрос в 05:05:05 на 90 000 Кбайт не помещается, поэтому сервер создаёт копию на 130 000 Кбайт и начинает раздел с 90 000; запрос в 07:07:07 на 62 000 даёт вторую копию на 90 000. Дальше раздел доходит до 122 000 и переполняется ещё дважды, но эти копии появились после 11:59:59 и в сумму не входят. Две отобранные копии — 130 000 и 90 000, их сумма 220 000. Больше всех данных передал клиент 303 (182 000 Кбайт). Ответ примера — 303 220 000.
Заметьте: копия — это объём, накопившийся до запроса, вызвавшего переполнение, а не после него.
Типичные ошибки
Копию считают после запроса
Переполнение обнаруживают уже после добавления объёма, и в копию попадает сумма вместе с вызвавшим её запросом. Правильный порядок: проверить, что used + S > K, зафиксировать used, обнулить раздел и только затем прибавить S.
Нестрогое сравнение при переполнении
Условие создания копии строгое: used + S > K. Если сумма в точности равна K, места хватает — копии нет. Знак «больше или равно» даёт лишнюю копию и неверное второе число.
Копии не ограничивают по времени
В сумму берут две наибольшие копии из всех, тогда как нужны только созданные не позднее 11:59:59. Копия, появившаяся позже, попадает в список и вытесняет нужную, поэтому второе число получается завышенным.
Заявки сортируют по времени начала
В задании о расписании заявки упорядочивают по времени окончания: раньше заканчивающаяся заявка оставляет больше времени на следующие. Сортировка по началу даёт меньше принятых заявок, а не наибольшее возможное число.
Числа в ответе стоят не на своих местах
Первым идёт идентификатор или количество, вторым — сумма. Даже если оба числа верны, но перепутаны местами, за задание ставят 1 балл, а не 2.
Вопросы и ответы
Как решать задание 26 ЕГЭ по информатике?
Написать программу, которая за один проход читает файл, копит нужные величины и печатает два числа. Вручную такое задание не решают: строк в файле до миллиона, а ответ должен полностью совпасть с эталоном.
Нужно ли писать программу для задания 26?
Да. В обобщённом плане ФИПИ у задания 26 стоит отметка о необходимости специализированного ПО, а из условия ответ не выводится: в демоверсии к заданию приложен файл на 15 001 строку.
Сколько баллов даёт задание 26 и сколько на него времени?
2 балла — столько же, сколько за задание 27, и больше, чем за любое из заданий 1–25. Если два верных числа перепутаны местами или на верном месте присутствует только одно верное число, ставят 1 балл. По обобщённому плану отводится около 35 минут, уровень сложности — высокий.
Что изменилось в задании 26 в 2027 году?
Изменилось правило частичного оценивания: в 2027 году одно верное число, если оно стоит не на своём месте, балла не даёт. В 2026 году для задания 26 было достаточно наличия одного верного числа в любом из двух полей. Тема и формат файла при этом прежние: «Изменения структуры КИМ отсутствуют», а среди заданий 10, 13 и 23 с новой тематикой задание 26 не названо.
Какой шаблон кода подходит для задания 26?
Один проход по строкам и несколько накопителей: словарь сумм по ключу, список найденных объектов, счётчик и итоговая длительность. В конце — максимум по словарю и две наибольшие величины из списка. Для расписания ещё нужен перевод времени в секунды.
Другие задания раздела «Алгоритмы и программирование»
- Задание 5алгоритм над двоичной записью числа · до 1 балла
- Задание 6исполнитель Черепаха · до 1 балла
- Задание 12исполнитель Редактор и машина Тьюринга · до 1 балла
- Задание 13число программ исполнителя · до 1 балла
- Задание 16рекурсивные функции · до 1 балла
- Задание 17обработка последовательности из файла · до 1 балла
- Задание 24обработка строки из файла · до 1 балла
- Задание 25делители и маски чисел · до 1 балла
По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено: