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

Задание 21 ЕГЭ по информатике 2027: теория игр: дерево игры

Задание 21до 1 баллатеория игр: дерево игры
Раздел
Теоретические основы информатики
Максимальный балл
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), и победы у Вани нет.

Решение на Python
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, и победы у Вани нет.

Решение на Python
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, и победы у Вани нет.

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

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

  1. Разберите условие игры: сколько куч, какие ходы разрешены и кто побеждает.
  2. Разметьте позиции с конца: выигрышная — есть ход в проигрышную, проигрышная — все ходы ведут в выигрышные.
  3. Отдельно отметьте победу первым ходом и победу первым или вторым ходом.
  4. Возьмите наименьшее S, где все ходы Пети ведут в победу Вани за ход или два, но хотя бы один — нет.
  5. Проверьте соседнее, меньшее значение: там хотя бы один ход Пети не даёт победы Вани. В ответ идёт одно целое число.

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

  • Выигрышные и проигрышные позиции. Их размечают с конца: выигрышная — есть ход в проигрышную, проигрышная — все ходы ведут в выигрышные.
  • Игра. Задание 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 года оно не названо.

Другие задания раздела «Теоретические основы информатики»

По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено:

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