Задание №19 ЕГЭ: Теория игр: выигрышная стратегия (1 ход) (ID 3188) — Ответ, условие и разбор | СмартКИМ
Не нашли свое задание? Попробуйте КИМСканер для быстрого поиска решения по фото или тексту: Открыть КИМСканер
СмартКИМ ЕГЭ Информатика
Каталог №19 Вариант ЕГЭ Разбор в СмартКИМ

Задание №19: Теория игр: выигрышная стратегия (1 ход)

Задача #3188 Формат ЕГЭ 2026 1 первичный балл
Основные типы и прототипы задания №19:
Одна куча камней (Победа за 1 ход) Две кучи камней (Победа Вани за 1 ход)

Условие задания

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в любую кучу один камень или увеличить количество камней в любой куче в четыре раза. Игра завершается в тот момент, когда общее количество камней в двух кучах становится не менее 100. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 6 камней, а во второй – S камней, 1 ≤ S ≤ 93.
Ответьте на следующие вопросы:
  Вопрос 1. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Назовите минимальное значение S, при котором это возможно.
  Вопрос 2. Найдите минимальное и максимальное значение S, при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
  Вопрос 3. Найдите значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Ответ: 1) 4<br/>2) 3 23<br/>3) 22

Решение на Python: Две кучи

from functools import lru_cache


def moves(h):
    a, b = h
    return [
        (a + 1, b), (a, b + 1),
        (a * 4, b), (a, b * 4),
    ]


@lru_cache(None)
def f(h, m):
    if sum(h) >= 100:
        return m % 2 == 0
    if m == 0:
        return 0
    hod = [f(x, m - 1) for x in moves(h)]
    if (m - 1) % 2 == 0:
        return any(hod)
    return all(hod)


S = range(1, 94)

q1, q2, q3 = [], [], []
for s in S:
    h = (6, s)
    if any(f(x, 1) for x in moves(h)):
        q1.append(s)
    if f(h, 3) and not f(h, 1):
        q2.append(s)
    if f(h, 4) and not f(h, 2):
        q3.append(s)

print(min(q1))
print(min(q2), max(q2))
print(q3)

Этот код разобран по шагам в разборе задания №19: там же типичные ошибки и лайфхаки.

Подготовка к ЕГЭ по информатике на 85+ баллов

В интерактивном тренажёре СмартКИМ вы можете решать варианты на время, писать и запускать код Python в браузере, работать с таблицами Excel и отслеживать свой классный рейтинг.