ЕГЭ информатика 19-21 задание разбор, теория, как решать.

ЕГЭ информатика 19-21 задание разбор, теория, как решать.

ЕГЭ Информатика — Полный разбор заданий №19–21 (игры с кучами)

Что решаем? Игры между Петей и Ваней: один или две кучи, добавляем/убираем/умножаем, игра заканчивается по порогу.
Нужно найти стартовые значения, при которых у Пети/Вани есть выигрышная стратегия.

1) Базовая идея

  • Ходы по очереди, Петя ходит первым.
  • Победа фиксируется, когда выполнено условие окончания игры (например, s ≥ 51 или s ≤ 19, или a+b ≥ M).
  • Выигрышная стратегия — игрок гарантированно выигрывает при любых ходах соперника.

2) Универсальный шаблон решения (рекурсия)

Где:

s — состояние (одна куча); для двух куч используйте f(a, b, m);

m — сколько ходов осталось до проверки условия (2 — для №19, 3 — для №20, 4 — для №21).

Особый случай: «после неудачного первого хода Пети»

Игроки не обязаны «портить» игру друг другу, поэтому можно считать, что после первого неудачного хода
оба ищут просто любой путь к победе:

3) Три типовых модели задач

Тип 1. Одна куча — «добавляем» (порог сверху)

Пример условия: за ход можно +1, +4 или ×2; игра заканчивается при s ≥ 51.

Код-шаблон

Пример ответа

Тип 2. Две кучи — «добавляем/умножаем» (порог по сумме)

Пример условия: за ход можно увеличить любую кучу на 1 или умножить на 2; игра заканчивается при a + b ≥ 227. Вторая куча фиксирована в условии, например b = 17.

Код-шаблон

Пример ответа

Тип 3. Одна куча — «убавляем/делим» (порог снизу)

Пример условия: за ход можно −2, −5, либо // 3; игра заканчивается при s ≤ 19.

Код-шаблон

Пример ответа

4) Как читать результаты для №19–21

Номер Логика в коде Смысл
19 f(s, 2) или f(a,b,2) Петя выигрывает своим первым ходом (за 1 ход).
20 not f(..., 1) and f(..., 3) Петя не выигрывает сразу, но выигрывает вторым ходом независимо от Вани.
21 not f(..., 2) and f(..., 4) У Вани нет гарантии победы первым/вторым ходом, но у Пети есть к 4-му ходу.

5) Быстрые правила и лайфхаки

  • Если в условии «после неудачного первого хода Пети» — замените all на any для обоих игроков (или просто верните any(h)).
  • Порог сверху: s ≥ N или a + b ≥ N; порог снизу: s ≤ N.
  • Для двух куч всегда проверяем по сумме, если так сказано в условии.
  • Номера задач → глубина:
    №19 → m = 2, №20 → m = 3, №21 → m = 4.
  • Диапазон перебора начальных значений: берите разумные границы из условия (например, 1..50 или 1..210).