Задание 22 ЕГЭ по информатике 2027: параллельные процессы
- Раздел
- Цифровая грамотность
- Максимальный балл
- 1 балл
- Уровень
- повышенный
- Что проверяет
- Построение математических моделей для решения практических задач. Архитектура современных компьютеров. Многопроцессорные системы
- Что нужно сделать
- В электронной таблице — процессы, их время и зависимости. Найти время завершения или число процессов, выполняемых одновременно.
- Как записать ответ
- только число: целое, без пробелов и единиц измерения
- Время
- Около 7 минут по обобщённому плану ФИПИ
- Элемент кодификатора
- 1.1
- Компьютер
- Нужна программа или электронная таблица: на станции КЕГЭ — среды программирования на C#, C++, Pascal, Java, Python и редактор таблиц
- Файл к заданию
- электронная таблица .ods; на сайте рядом — копия .xlsx, и CSV для Python
- В 2026 году
- Тоже задание 22
Задание 22 ЕГЭ по информатике 2027 года проверяет, по формулировке обобщённого плана ФИПИ, «Построение математических моделей для решения практических задач. Архитектура современных компьютеров. Многопроцессорные системы». Это задача о расписании: в файле для каждого вычислительного процесса указано время работы и процессы, результаты которых ему нужны, а спросить могут, сколько процессов идёт одновременно в заданную миллисекунду, сколько успело завершиться к какому-то моменту или когда закончится последний.
К заданию приложена электронная таблица: идентификатор процесса, время выполнения в миллисекундах и через «;» идентификаторы процессов, от которых он зависит; 0 означает независимый процесс. В демоверсии 2027 года это demo_22.ods; копии .xlsx и .csv есть только в тренажёре этой страницы, на экзамене файл будет в открытом формате. Задание повышенного уровня, около 7 минут по обобщённому плану, 1 балл, специализированное ПО требуется. Тема в 2027 году не менялась: «Изменения структуры КИМ отсутствуют». По методическим рекомендациям ФИПИ средний процент выполнения задания 22 в 2026 году — 41,3.
Ниже — три типа задания с разбором: решения на Python и формулы для электронной таблицы, затем разбор демоверсии 2027 и типичные ошибки.
Тренажёр задания 22
Десять заданий номера 22 из банка тренажёра — с файлами, как на станции КЕГЭ. Решайте в песочнице Python прямо на странице или у себя; ответ проверяется по ключу, после проверки — верный ответ, разбор и решение на Python, а при ошибке — разбор от ИИ. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.
Задание 22 вместе с остальными — в вариантах целиком.
Типы задания 22 с решением
Процессы, идущие параллельно на заданной миллисекунде
В файле — таблица процессов: ID, время выполнения в миллисекундах и через «;» ID процессов, от которых процесс зависит (0 — независимый). Определите максимальное количество процессов, которые параллельно выполняются на 8-й мс. Каждый процесс начинается в самое раннее допустимое время, нумерация миллисекунд — с 1.
ID процесса B,Время выполнения процесса B (мс),ID процесса (ов) A 1,8,0 2,8,0 3,8,0 4,5,1
Для этого примера ответ — 3.
Задание выполняется с использованием прилагаемого файла
1. Читаем таблицу в два словаря: время выполнения процесса и список его зависимостей. 2. Считаем миллисекунду окончания: у независимого процесса это его время, у зависимого — своё время плюс наибольшее окончание среди предшественников. Расчёт идёт в порядке «зависимости уже посчитаны»: такой порядок существует, потому что циклов в данных нет. 3. Процесс с началом s и временем d занимает мс с s по s + d − 1, поэтому на m-й мс он идёт, если s ≤ m и s + d − 1 ≥ m. 4. Считаем, сколько процессов подходит.
На примере: процессы 1–3 независимы и занимают мс 1–8 каждый, процесс 4 ждёт первый и идёт мс 9–13. На 8-й мс работают три процесса. Это тип задания из демоверсии 2027 года.
import csv
# ID процесса -> время выполнения и список процессов-предшественников
duration = {}
depends = {}
with open('22.csv', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # строка заголовка
for row in reader:
if not row:
continue
pid = int(row[0])
duration[pid] = int(row[1])
depends[pid] = [] if row[2].strip() == '0' else [int(x) for x in row[2].split(';')]
# миллисекунда окончания: своё время плюс самый поздний предшественник
finish = {}
while len(finish) < len(duration):
for pid in duration:
if pid not in finish and all(d in finish for d in depends[pid]):
finish[pid] = duration[pid] + max((finish[d] for d in depends[pid]), default=0)
# на заданной мс процесс идёт, если начался не позже и закончился не раньше
moment = 8
busy = 0
for pid in duration:
if finish[pid] - duration[pid] < moment <= finish[pid]:
busy += 1
print(busy)
Ответ на приложенном файле: 3
Данные — в столбцах A, B и C, начиная со второй строки: A — ID процесса, B — время выполнения в миллисекундах, C — ID процессов, от которых он зависит («0» — независимый). Если идентификаторы идут подряд с 1, процесс с ID k стоит в строке k + 1; при другой нумерации строку процесса находят по значению в столбце A.
Столбец D — миллисекунда окончания. Формула в D у каждой строки своя: она ссылается на строки именно тех процессов, что перечислены в столбце C этой строки, поэтому протянуть одну формулу на весь столбец нельзя — столбец заполняют построчно. У независимого процесса окончание равно времени: в D2 =B2. У зависимого — время плюс наибольшее окончание среди предшественников: для процесса 1 в строке 2, зависящего от процессов 5 и 15 (строки 6 и 16), в D2 — =B2+МАКС(D6;D16); независимый процесс 6 в строке 7 никого не ждёт, в D7 — =B7.
Столбец E — миллисекунда начала: в E2 формула =D2-B2+1, её можно протянуть вниз до последней строки с данными. На 8-й мс процесс идёт, если начался не позже неё и закончился не раньше; число таких процессов даёт =СЧЁТЕСЛИМН(E:E;"<=8";D:D;">=8").
Процессы, завершившиеся за первые миллисекунды
Та же таблица процессов. Определите максимальное количество процессов, которые могут быть завершены за первые 74 мс. Каждый процесс начинается в самое раннее допустимое время, нумерация миллисекунд — с 1.
ID процесса B,Время выполнения процесса B (мс),ID процесса (ов) A 1,10,0 2,20,1 3,40,1 4,30,2;3 5,25,0 6,5,5 7,35,4
Для этого примера ответ — 5.
Задание выполняется с использованием прилагаемого файла
1. Миллисекунду окончания процесса считаем так же, как в первом типе: своё время плюс наибольшее окончание среди предшественников, у независимого — просто своё время. 2. Процесс успевает завершиться к заданному моменту, если его окончание не позже этого момента. Начало и длина интервала здесь не нужны. 3. Считаем такие процессы.
На примере: независимые процессы 1 и 5 заканчиваются на 10-й и 25-й мс, процесс 2 — на 30-й, процесс 6 ждёт пятый и заканчивается на 30-й, процесс 3 — на 50-й. Процесс 4 ждёт самый поздний из предшественников (процесс 3, окончание 50) и заканчивается на 80-й мс, процесс 7 — на 115-й. До 74-й мс успевают пять процессов.
import csv
# читаем таблицу: время выполнения и зависимости каждого процесса
duration = {}
depends = {}
with open('22.csv', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # строка заголовка
for row in reader:
if not row:
continue
pid = int(row[0])
duration[pid] = int(row[1])
depends[pid] = [] if row[2].strip() == '0' else [int(x) for x in row[2].split(';')]
# миллисекунда окончания процесса
finish = {}
while len(finish) < len(duration):
for pid in duration:
if pid not in finish and all(d in finish for d in depends[pid]):
finish[pid] = duration[pid] + max((finish[d] for d in depends[pid]), default=0)
# успел завершиться за первые 74 мс тот, у кого окончание не позже 74-й
moment = 74
finished = 0
for pid in duration:
if finish[pid] <= moment:
finished += 1
print(finished)
Ответ на приложенном файле: 15
Столбцы A, B и C — как в предыдущем типе: ID процесса, время выполнения и зависимости («0» — независимый процесс). Формула в столбце D у каждой строки своя — ссылки идут на строки предшественников из столбца C, и протянуть её вниз нельзя.
В D — миллисекунда окончания процесса: у независимого формула =B2, у зависимого — своё время плюс наибольшее окончание предшественников. В файле с ID 201–229 процесс 201 записан в строке 2, поэтому процесс 203 — в строке 4 и зависит от процессов 222, 227 и 224 из строк 23, 28 и 25: в D4 — =B4+МАКС(D23;D28;D25). Независимый процесс 206 стоит в строке 7: в D7 — =B7. Миллисекунда начала для этого вопроса не нужна.
Процесс успевает завершиться за первые 74 мс, если его окончание не позже 74-й; количество таких процессов даёт =СЧЁТЕСЛИ(D:D;"<=74").
Минимальное время выполнения всех процессов
Та же таблица процессов. Определите, на какой миллисекунде завершится последний процесс, то есть минимальное время, за которое могут быть выполнены все процессы. Каждый процесс начинается в самое раннее допустимое время, нумерация миллисекунд — с 1.
ID процесса B,Время выполнения процесса B (мс),ID процесса (ов) A 1,4,0 2,7,1 3,2,1 4,5,2;3 5,3,4
Для этого примера ответ — 19.
Задание выполняется с использованием прилагаемого файла
1. Миллисекунда окончания процесса уже знакома: это своё время плюс наибольшее окончание среди предшественников, у независимого — просто время работы. 2. Последний процесс завершается на самой поздней такой миллисекунде, поэтому ответ — наибольшее окончание среди всех процессов. 3. Его же называют длиной самой долгой цепочки зависимостей: внутри цепочки процессы идут строго друг за другом, и раньше этого момента все процессы выполниться не могут.
На примере: окончания процессов — 4, 11, 6, 16 и 19. Максимум 19 даёт цепочка 1 → 2 → 4 → 5: 4 + 7 + 5 + 3 = 19.
import csv
# читаем таблицу: время выполнения и зависимости каждого процесса
duration = {}
depends = {}
with open('22.csv', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # строка заголовка
for row in reader:
if not row:
continue
pid = int(row[0])
duration[pid] = int(row[1])
depends[pid] = [] if row[2].strip() == '0' else [int(x) for x in row[2].split(';')]
# миллисекунда окончания процесса
finish = {}
while len(finish) < len(duration):
for pid in duration:
if pid not in finish and all(d in finish for d in depends[pid]):
finish[pid] = duration[pid] + max((finish[d] for d in depends[pid]), default=0)
# последний процесс завершается на самой поздней миллисекунде
print(max(finish.values()))
Ответ на приложенном файле: 224
Столбцы A, B и C — как в предыдущем типе: ID процесса, время выполнения и зависимости («0» — независимый процесс).
Столбец D — миллисекунда окончания. Формула здесь тоже своя в каждой строке: она ссылается на строки процессов из столбца C, поэтому столбец заполняют построчно, а не протягивают. У независимого процесса окончание равно времени: =B2. У зависимого — своё время плюс наибольшее окончание предшественников. В файле с ID 101–122 процесс 101 записан в строке 2 и зависит от процессов 116 и 106 из строк 17 и 7: в D2 — =B2+МАКС(D17;D7); независимый процесс 116 стоит в строке 17: в D17 — =B17.
Последний процесс завершается на самой поздней такой миллисекунде, поэтому ответ даёт =МАКС(D:D).
Как выполнять задание
- Сохраните файл задания в рабочую папку и откройте копию редактором электронных таблиц. На экзамене файл будет в формате .ods; копии .xlsx и .csv существуют только в тренажёре этой страницы.
- Прочитайте вопрос до конца: от него зависит, что считать — число процессов в заданную миллисекунду, число завершившихся к моменту или миллисекунду окончания последнего процесса.
- Выберите способ. В таблице заведите столбец окончаний, а для вопроса о конкретной миллисекунде — ещё и столбец начал. Если удобнее программировать, читайте CSV-копию построчно: запятая разделяет столбцы, точка с запятой — зависимости внутри третьего столбца.
- Проверьте способ на типовом примере из условия: там названы начало и конец одного из процессов, и расчёт должен с ними совпасть. Только после этого считайте по файлу.
- В ответ впишите одно целое число — количество процессов или номер миллисекунды, без пробелов и единиц измерения.
Что нужно знать
- Зависимости. Процессы — вершины графа: ребро A → B значит, что B не начнётся, пока не закончится A. Циклов в данных нет, поэтому расписание определено однозначно.
- Раннее начало. Независимый процесс (в таблице 0) стартует на 1-й мс, зависимый — сразу после самого позднего предшественника: времена ожидаемых процессов не складывают, берут максимум.
- Окончание и интервал. Окончание — время работы плюс наибольшее окончание среди предшественников. Процесс с началом s и временем d занимает мс с s по s + d − 1, поэтому на m-й мс он идёт, если s ≤ m и s + d − 1 ≥ m.
- Критический путь. Минимальное время выполнения всех процессов — самая долгая цепочка зависимостей, она же наибольшее окончание.
Как оценивается
Проверка автоматическая, по ключу: ответ должен быть записан в форме из условия и полностью совпасть с эталоном. Код и черновики не проверяют — значение имеет только ответ. За верный ответ — 1 балл, частичного балла нет.
Критерии всех заданий экзамена — на странице критериев ЕГЭ.
Разбор задания демоверсии 2027
В демоверсии 2027 года процессы заданы файлом demo_22.ods: строка заголовка, дальше по строке на процесс. Спрашивают, сколько процессов идёт параллельно на 7-й мс при самых ранних стартах.
Типовой пример в условии — шесть процессов. Независимые процессы 1 и 4 занимают мс 1–3 и 1–5, процесс 6 ждёт первый и идёт мс 4–6, процесс 2 ждёт первый и идёт мс 4–7, процесс 5 ждёт 1 и 4 и идёт мс 6–13, а процесс 3 ждёт 2 и 4 и начинается на 8-й мс — так и сказано в условии. На 7-й мс работают только процессы 2 и 5.
Тот же расчёт на файле демоверсии даёт 8 — это ключ ФИПИ.
Типичные ошибки
Отсчёт миллисекунд с нуля
Нумерация начинается с 1, и демоверсия это подчёркивает. Если считать с нуля, границы интервалов сдвинутся и количество процессов на заданной мс изменится.
Сумма времён вместо максимума
Процесс ждёт только самого позднего предшественника. Если сложить времена всех процессов, от которых он зависит, расписание растянется и ответ вырастет.
Проверено только одно условие
Процесс идёт на m-й мс, если начался не позже неё и закончился не раньше. Проверка только начала или только конца захватывает соседние миллисекунды и даёт завышенное число.
Формула протянута на весь столбец
В столбце D у каждой строки своя формула: она ссылается на строки именно тех процессов, что перечислены в столбце C этой строки. Протянуть одну формулу вниз нельзя, столбец заполняют построчно.
Независимые процессы потеряны
0 в третьем столбце означает, что процесс никого не ждёт и начинается на 1-й мс. Если обрабатывать только строки со списком зависимостей, из ответа выпадут все независимые процессы.
Вопросы и ответы
Как решать задание 22 ЕГЭ по информатике?
Вручную расписание не считают: процессов в файле десятки. Сначала для каждого процесса находят миллисекунду окончания: у независимого она равна времени работы, у зависимого это время плюс наибольшее окончание среди предшественников. Затем отвечают на вопрос условия — все три типа решаются на одном расписании.
Можно ли решить задание 22 без программы, только электронной таблицей?
Да, задание и рассчитано на редактор электронных таблиц: понадобится столбец окончаний, а для вопроса о конкретной миллисекунде — ещё и столбец начал. Ответ дают СЧЁТЕСЛИ, СЧЁТЕСЛИМН или МАКС.
Что означает 0 в третьем столбце файла?
Что процесс независимый: он не ждёт результатов других и начинается на 1-й мс. Его миллисекунда окончания равна времени выполнения, и формула в таблице для него короче.
Сколько баллов даёт задание 22 и сколько на него времени?
1 балл, частичного балла нет. По обобщённому плану ФИПИ отводится около 7 минут; уровень повышенный, специализированное ПО требуется.
Другие задания раздела «Цифровая грамотность»
По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено: