Перейти к содержимому

Задание 22 ЕГЭ по информатике 2027: параллельные процессы

Задание 22до 1 баллапараллельные процессы
Раздел
Цифровая грамотность
Максимальный балл
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.

Задание выполняется с использованием прилагаемого файла

22.ods1,5 КБ22.xlsx2,4 КБкопия для Excel — на экзамене будет .ods22.csv267 байткак после «Сохранить как CSV» — для решения на Python

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 года.

Решение на Python
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.

Задание выполняется с использованием прилагаемого файла

22.ods1,7 КБ22.xlsx2,7 КБкопия для Excel — на экзамене будет .ods22.csv484 байткак после «Сохранить как CSV» — для решения на Python

1. Миллисекунду окончания процесса считаем так же, как в первом типе: своё время плюс наибольшее окончание среди предшественников, у независимого — просто своё время. 2. Процесс успевает завершиться к заданному моменту, если его окончание не позже этого момента. Начало и длина интервала здесь не нужны. 3. Считаем такие процессы.

На примере: независимые процессы 1 и 5 заканчиваются на 10-й и 25-й мс, процесс 2 — на 30-й, процесс 6 ждёт пятый и заканчивается на 30-й, процесс 3 — на 50-й. Процесс 4 ждёт самый поздний из предшественников (процесс 3, окончание 50) и заканчивается на 80-й мс, процесс 7 — на 115-й. До 74-й мс успевают пять процессов.

Решение на Python
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.

Задание выполняется с использованием прилагаемого файла

22.ods1,7 КБ22.xlsx2,6 КБкопия для Excel — на экзамене будет .ods22.csv422 байткак после «Сохранить как CSV» — для решения на Python

1. Миллисекунда окончания процесса уже знакома: это своё время плюс наибольшее окончание среди предшественников, у независимого — просто время работы. 2. Последний процесс завершается на самой поздней такой миллисекунде, поэтому ответ — наибольшее окончание среди всех процессов. 3. Его же называют длиной самой долгой цепочки зависимостей: внутри цепочки процессы идут строго друг за другом, и раньше этого момента все процессы выполниться не могут.

На примере: окончания процессов — 4, 11, 6, 16 и 19. Максимум 19 даёт цепочка 1 → 2 → 4 → 5: 4 + 7 + 5 + 3 = 19.

Решение на Python
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).

Как выполнять задание

  1. Сохраните файл задания в рабочую папку и откройте копию редактором электронных таблиц. На экзамене файл будет в формате .ods; копии .xlsx и .csv существуют только в тренажёре этой страницы.
  2. Прочитайте вопрос до конца: от него зависит, что считать — число процессов в заданную миллисекунду, число завершившихся к моменту или миллисекунду окончания последнего процесса.
  3. Выберите способ. В таблице заведите столбец окончаний, а для вопроса о конкретной миллисекунде — ещё и столбец начал. Если удобнее программировать, читайте CSV-копию построчно: запятая разделяет столбцы, точка с запятой — зависимости внутри третьего столбца.
  4. Проверьте способ на типовом примере из условия: там названы начало и конец одного из процессов, и расчёт должен с ними совпасть. Только после этого считайте по файлу.
  5. В ответ впишите одно целое число — количество процессов или номер миллисекунды, без пробелов и единиц измерения.

Что нужно знать

  • Зависимости. Процессы — вершины графа: ребро 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
Обновлено:

Все задания ЕГЭ по информатике →