Задание 21 ЕГЭ по информатике 2027: теория игр: дерево игры
- Раздел
- Теоретические основы информатики
- Максимальный балл
- 1 балл
- Уровень
- высокий
- Что проверяет
- Умение построить дерево игры по заданному алгоритму и найти выигрышную стратегию
- Что нужно сделать
- Построить дерево игры из задания 19 и найти значение, при котором второй игрок выигрывает первым или вторым ходом, но гарантированно выиграть первым не может.
- Как записать ответ
- только число: целое, без пробелов и единиц измерения
- Время
- Около 10 минут по обобщённому плану ФИПИ
- Элемент кодификатора
- 2.15
- Компьютер
- Специальное ПО по плану ФИПИ не нужно: задание решают рассуждением, программа — для проверки
- Файл к заданию
- Нет — все данные в условии
- В 2026 году
- Тоже задание 21
Задание 21 ЕГЭ по информатике 2027 года проверяет, по формулировке обобщённого плана ФИПИ, «Умение построить дерево игры по заданному алгоритму и найти выигрышную стратегию». Это третье задание одной игры с кучами камней: в 19 находят значение S, при котором Ваня выигрывает первым ходом, в 20 — где выигрывает Петя, а в 21 — наименьшее S, при котором у Вани есть стратегия на победу первым или вторым ходом, но гарантированной победы первым ходом нет.
Уровень задания высокий, за верный ответ дают 1 балл, по обобщённому плану ФИПИ на него отводится около 10 минут. Компьютер и специализированное ПО не нужны: игру разбирают вручную, а в ответ идёт одно целое число. В 2027 году задание по смыслу не изменилось — среди новых тем оно не названо; время уменьшилось с 11 минут. В 2026 году с заданием справились в среднем 53 % участников.
Ниже — три типа задания с разбором на Python.
Тренажёр задания 21
Десять заданий номера 21 из банка тренажёра — с файлами, как на станции КЕГЭ. Решайте в песочнице Python прямо на странице или у себя; ответ проверяется по ключу, после проверки — верный ответ, разбор и решение на Python, а при ошибке — разбор от ИИ. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.
Задание 21 вместе с остальными — в вариантах целиком.
Типы задания 21 с решением
Две кучи: добавить камни или увеличить кучу
Две кучи камней. За ход игрок может добавить 5 камней в одну из куч по своему выбору или увеличить камни одной из куч в 2 раза. Игра кончается, когда суммарно становится не менее 120 камней; побеждает сделавший последний ход. В первой куче 14 камней, во второй — S (от 1 до 105).
Найдите наименьшее S, при котором у Вани есть выигрышная стратегия на победу первым или вторым ходом при любой игре Пети, но нет стратегии гарантированно выиграть первым ходом.
1. Разбираем игру: две кучи, ход — добавить 5 камней или удвоить одну кучу, конец при сумме не менее 120. 2. Размечаем позиции с конца: выигрышная — есть ход в проигрышную, проигрышная — все ходы ведут в выигрышные. 3. Отмечаем победу первым ходом и победу первым или вторым ходом. 4. Берём первое S, где все ходы Пети ведут в победу Вани за ход или два, но хотя бы один — не в победу с первого хода.
На примере: при S = 39 Петя не выигрывает сразу; после хода в (14, 78) Ваня заканчивает первым ходом, после хода в (19, 39) побеждает вторым. При S = 38 Петя уходит в (14, 43), и победы у Вани нет.
from functools import lru_cache
LIMIT = 120 # игра заканчивается при сумме не менее 120
PLUS = 5 # добавление камней
MULT = 2 # увеличение кучи
FIRST = 14 # камней в первой куче в начале
def moves(pos):
"""Позиции, которые можно получить из pos одним ходом."""
a, b = pos
return ((a + PLUS, b), (a, b + PLUS), (a * MULT, b), (a, b * MULT))
def is_over(pos):
"""Игра закончена: в двух кучах суммарно не меньше LIMIT камней."""
return pos[0] + pos[1] >= LIMIT
@lru_cache(maxsize=None)
def wins_first(pos):
"""Игрок, чей ход, выигрывает своим первым ходом."""
return any(is_over(q) for q in moves(pos))
@lru_cache(maxsize=None)
def wins_second(pos):
"""Игрок, чей ход, выигрывает своим вторым ходом (первым — не может)."""
if wins_first(pos):
return False
for q in moves(pos):
if not is_over(q) and all(not is_over(r) and wins_first(r) for r in moves(q)):
return True
return False
for s in range(1, 106):
pos = (FIRST, s)
if wins_first(pos):
continue # Петя выигрывает сразу, случай не подходит
after = moves(pos)
if all(not is_over(q) and (wins_first(q) or wins_second(q)) for q in after) \
and any(not wins_first(q) for q in after):
print(s)
break
Ответ: 39
Одна куча: добавить камни или увеличить кучу
Одна куча камней. За ход игрок может добавить в кучу 3 камня или увеличить количество камней в куче в 3 раза. Игра кончается, когда камней становится не менее 93; побеждает сделавший последний ход. В начале в куче S камней (от 1 до 92).
Найдите наименьшее S, при котором у Вани есть выигрышная стратегия на победу первым или вторым ходом при любой игре Пети, но нет стратегии гарантированно выиграть первым ходом.
1. Разбираем игру: одна куча, ход — добавить 3 камня или утроить кучу, конец при 93 камнях и более. 2. Размечаем позиции с конца. 3. Для каждого S отмечаем победу Вани первым ходом и победу первым или вторым ходом. 4. Берём наименьшее S, где победа за два хода есть, а гарантированной победы с первого хода нет.
На примере: при S = 22 Петя пойдёт в 25 или в 66. После хода в 66 Ваня утраивает кучу и выигрывает первым ходом; после хода в 25 он идёт в 28, и любой ответ Пети (31 или 84) снова даёт победный ход — это победа вторым ходом. При S = 21 Петя уходит в 24, и победы у Вани нет.
from functools import lru_cache
LIMIT = 93 # игра заканчивается при 93 камнях и более
PLUS = 3 # добавление камней
MULT = 3 # увеличение кучи
def moves(pos):
"""Количества камней, которые можно получить одним ходом."""
return (pos + PLUS, pos * MULT)
def is_over(pos):
"""Игра закончена: в куче не меньше LIMIT камней."""
return pos >= LIMIT
@lru_cache(maxsize=None)
def wins_first(pos):
"""Игрок, чей ход, выигрывает своим первым ходом."""
return any(is_over(q) for q in moves(pos))
@lru_cache(maxsize=None)
def wins_second(pos):
"""Игрок, чей ход, выигрывает своим вторым ходом (первым — не может)."""
if wins_first(pos):
return False
for q in moves(pos):
if not is_over(q) and all(not is_over(r) and wins_first(r) for r in moves(q)):
return True
return False
for s in range(1, LIMIT):
if wins_first(s):
continue # Петя выигрывает сразу, случай не подходит
after = moves(s)
if all(not is_over(q) and (wins_first(q) or wins_second(q)) for q in after) \
and any(not wins_first(q) for q in after):
print(s)
break
Ответ: 22
Одна куча: убрать камни или уменьшить кучу
Одна куча камней. За ход игрок может убрать из кучи 3 камня, убрать 7 камней или уменьшить количество камней в куче в 4 раза (деление с округлением до меньшего). Игра кончается, когда камней становится не более 28; побеждает сделавший последний ход. В начале в куче S камней, S больше 28.
Найдите наименьшее S, при котором у Вани есть выигрышная стратегия на победу первым или вторым ходом при любой игре Пети, но нет стратегии гарантированно выиграть первым ходом.
1. Разбираем игру: одна куча, ход — убрать 3 камня, убрать 7 камней или уменьшить кучу в 4 раза с округлением до меньшего; конец при 28 камнях и менее. 2. Размечаем позиции с конца. 3. Отмечаем победу Вани первым ходом и победу первым или вторым ходом. 4. Берём наименьшее S больше 28, где все ходы Пети ведут в победу Вани за ход или два, но хотя бы один — не в победу с первого хода.
На примере: при S = 122 Петя не выигрывает сразу. После хода в 115 Ваня кончает игру первым ходом (115 на 4 с округлением до меньшего даёт 28), а после хода в 119 Ваня идёт в 116, и любой ответ Пети (113, 109 или 29) снова даёт Ване победный первый ход. При S = 121 Петя уходит в 118, и победы у Вани нет.
from functools import lru_cache
LIMIT = 28 # игра заканчивается при 28 камнях и менее
MINUS1 = 3 # ход «убрать камни»
MINUS2 = 7 # второй такой ход
DIV = 4 # ход «уменьшить кучу в 4 раза»
def moves(pos):
"""Количества камней, которые можно получить одним ходом."""
return (pos - MINUS1, pos - MINUS2, pos // DIV)
def is_over(pos):
"""Игра закончена: в куче не больше LIMIT камней."""
return pos <= LIMIT
@lru_cache(maxsize=None)
def wins_first(pos):
"""Игрок, чей ход, выигрывает своим первым ходом."""
return any(is_over(q) for q in moves(pos))
@lru_cache(maxsize=None)
def wins_second(pos):
"""Игрок, чей ход, выигрывает своим вторым ходом (первым — не может)."""
if wins_first(pos):
return False
for q in moves(pos):
if not is_over(q) and all(not is_over(r) and wins_first(r) for r in moves(q)):
return True
return False
for s in range(LIMIT + 1, LIMIT * 20):
if wins_first(s):
continue # Петя выигрывает сразу, случай не подходит
after = moves(s)
if all(not is_over(q) and (wins_first(q) or wins_second(q)) for q in after) \
and any(not wins_first(q) for q in after):
print(s)
break
Ответ: 122
Как выполнять задание
- Разберите условие игры: сколько куч, какие ходы разрешены и кто побеждает.
- Разметьте позиции с конца: выигрышная — есть ход в проигрышную, проигрышная — все ходы ведут в выигрышные.
- Отдельно отметьте победу первым ходом и победу первым или вторым ходом.
- Возьмите наименьшее S, где все ходы Пети ведут в победу Вани за ход или два, но хотя бы один — нет.
- Проверьте соседнее, меньшее значение: там хотя бы один ход Пети не даёт победы Вани. В ответ идёт одно целое число.
Что нужно знать
- Выигрышные и проигрышные позиции. Их размечают с конца: выигрышная — есть ход в проигрышную, проигрышная — все ходы ведут в выигрышные.
- Игра. Задание 21 опирается на ту же игру, что задание 19: те же кучи, ходы и условие окончания.
- Две отметки. Победа первым ходом — есть ход, сразу заканчивающий игру; победа за два хода — есть ход в позицию, из которой любой ответ соперника приводит к выигрышной для вас позиции. Победа первым или вторым ходом — выполнение хотя бы одной из этих отметок.
- Что ищут. Наименьшее S, где каждый ход Пети ведёт в победу Вани за ход или два, но хотя бы один ход не даёт победы с первого хода.
Игру из заданий 19–21 можно разобрать и в демоверсии КЕГЭ 2027 на сайте.
Как оценивается
Проверка автоматическая, по ключу: ответ должен быть записан в форме из условия и полностью совпасть с эталоном. Код и черновики не проверяют — значение имеет только ответ. За верный ответ — 1 балл, частичного балла нет.
Критерии всех заданий экзамена — на странице критериев ЕГЭ.
Разбор задания демоверсии 2027
В демоверсии 2027 года задание 21 опирается на игру из 19: две кучи, в первой 17 камней, во второй — S. За ход можно добавить 4 камня в кучу или удвоить кучу; игра кончается при сумме не менее 133, побеждает сделавший последний ход.
Разберём ответ S = 44. Ходы Пети дают (21, 44), (17, 48), (34, 44) и (17, 88). После хода в (17, 88) Ваня выигрывает сразу: сумма превышает 133. Три другие позиции — победа Вани вторым ходом: из (21, 44) он идёт в (42, 44), и любой ответ Пети снова даёт победный ход. Гарантированной победы первым ходом нет: ни один ход Вани из (21, 44) не доводит сумму до 133.
При S = 43 так не выходит: Петя идёт в (17, 47), где Ваня не выигрывает ни первым, ни вторым ходом. Ключ ФИПИ — 44.
Типичные ошибки
Решают задание 20 вместо 21
В 20 выигрывает Петя, в 21 — Ваня побеждает первым или вторым ходом, но не гарантированно первым. Ответы не совпадают.
Забыли второе условие
Берут наименьшее S с победой Вани и не проверяют, что гарантированной победы первым ходом нет.
Проверяют один ход Пети
Требуется победа «при любой игре Пети»: победа должна быть после каждого хода Пети.
any вместо all при ответе соперника
Ход Вани считают удачным, если он ведёт к победе при одном ответе Пети. Годится лишь ход с победой при любом ответе.
Деление не до меньшего
В играх с уменьшением кучи делят с округлением до меньшего (//): 115 на 4 — это 28, а не 29. Иначе разметка меняется.
Вопросы и ответы
Как решать задание 21 ЕГЭ по информатике?
Разметить позиции с конца и взять наименьшее S, где все ходы Пети ведут в победу Вани за ход или два, но хотя бы один не даёт победы с первого хода.
Можно ли решить задание 21 без программы?
Да. Специализированное ПО не предусмотрено: игру разбирают в черновике. Программа нужна только для проверки — она быстро перебирает S.
Чем задание 21 отличается от 19 и 20?
Игра одна. В 19 Ваня выигрывает первым ходом, в 20 — Петя, в 21 Ваня побеждает первым или вторым ходом, но не гарантированно первым.
Сколько баллов даёт задание 21 и сколько на него времени?
1 балл, частичного балла нет: ответ должен полностью совпасть с эталоном. По обобщённому плану отводится около 10 минут; в 2026 году — 11 минут.
Что изменилось в задании 21 в 2027 году?
По сути ничего: «Изменения структуры КИМ отсутствуют», среди новых тем 2027 года оно не названо.
Другие задания раздела «Теоретические основы информатики»
- Задание 1схема дорог и таблица расстояний · до 1 балла
- Задание 2таблицы истинности · до 1 балла
- Задание 4условие Фано и кодирование · до 1 балла
- Задание 7объём изображения и звука · до 1 балла
- Задание 8слова и комбинаторика · до 1 балла
- Задание 11объём сообщения и пароли · до 1 балла
- Задание 14системы счисления · до 1 балла
- Задание 15логические выражения · до 1 балла
- Задание 19теория игр: выигрыш первым ходом · до 1 балла
- Задание 20теория игр: выигрыш вторым ходом · до 1 балла
- Задание 23кратчайший путь в графе · до 1 балла
По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено: