Задание 21 ЕГЭ по информатике: выигрышная стратегия для одной и двух куч

Подтемы

Что проверяет задание

Задание 21 проверяет умение анализировать игру двух игроков с полной информацией и находить выигрышную стратегию методом обратного анализа (от конца игры к началу). Игрок должен уметь:

  • строить множество позиций, из которых можно выиграть немедленно;
  • строить множества позиций, из которых гарантирован выигрыш не позднее второго, третьего и так далее хода;
  • переносить эту логику на игры с одной кучей камней и на игры с двумя кучами, где состояние описывается парой чисел (a,b)(a, b).

В основе — рекурсивная идея: судить о позиции можно только после того, как разобраны все позиции, из которых в неё можно попасть.

Как выглядит формулировка и сколько баллов

Типовая формулировка: два игрока по очереди изменяют кучу (или две кучи) камней по фиксированным правилам (добавить kk камней, умножить на mm и т.п.), первый ход делает Петя. Игра заканчивается, когда количество камней становится не менее NN; выигрывает сделавший последний ход. Задан диапазон начального количества камней SS, обычно 1≤S≤N−11 \le S \le N-1.

Задание обычно состоит из трёх пунктов (а, б, в), каждый оценивается отдельно, суммарно за задание можно получить до 3 первичных баллов. Самый сложный пункт — про подтемы «одна куча» и «две кучи» — требует найти SS, при котором у одного игрока есть стратегия выиграть не позже второго хода, но нет стратегии выиграть первым ходом. Это узкая, но регулярно встречающаяся формулировка, и именно она разбирается ниже.

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

  • Позиция — количество камней перед очередным ходом (для одной кучи — число, для двух куч — пара (a,b)(a,b)).
  • Игра завершается, как только позиция становится ≥N\ge N; выигрывает игрок, сделавший последний ход.
  • Проигрышная позиция (П): все ходы из неё ведут в выигрышные позиции соперника.
  • Выигрышная позиция (В): существует ход в позицию ≥N\ge N либо в проигрышную позицию соперника. x∈В  ⟺  ∃ x→x′:x′≥N или x′∈Пx \in \text{В} \iff \exists\, x \to x' : x' \ge N \ \text{или}\ x' \in \text{П} x∈П  ⟺  ∀ x→x′:x′∈Вx \in \text{П} \iff \forall\, x \to x' : x' \in \text{В}
  • Для задач «выиграть не позже второго хода» нужны более тонкие множества: A={x<N:∃ x→y, y≥N}A = \{x < N : \exists\, x \to y,\ y \ge N\} — из xx можно выиграть немедленно; B={x<N, x∉A:∀ x→x′, x′∈A}B = \{x < N,\ x \notin A : \forall\, x \to x',\ x' \in A\} — из xx нельзя выиграть сразу, но любой ход соперника загоняет его в AA для следующего игрока; C={x<N:∃ x→y, y≥N или y∈B}C = \{x < N : \exists\, x \to y,\ y \ge N \ \text{или}\ y \in B\} — из xx можно выиграть не позднее второго хода.
  • Условие «выиграть не позже второго хода, но не первым»: все ходы противника из SS попадают в CC, и при этом не все ходы противника из SS попадают в AA.

Методы решения

1. Обратный анализ для одной кучи. Строится таблица В/П для чисел от N−1N-1 вниз до 1. Пример: N=10N=10, ходы +1+1 и +2+2. Число 9 — В (можно дойти до 10). Число 8 — В (ход +2 даёт 10). Число 7: ходы дают 8 (В) и 9 (В) — оба В, значит 7 — П. Так последовательно заполняется вся таблица.

2. Построение множеств AA, BB, CC через неравенства. Вместо перебора всех чисел можно сразу выразить границы множеств. Например, если ходы +1+1 и умножение на 2, а N=20N=20: AA — это xx, для которых x+1≥20x+1\ge20 или 2x≥202x\ge20, то есть x≥19x\ge19 или x≥10x\ge10, значит A=[10,19]A=[10,19]. Далее аналогично ищется BB среди x<10x<10: нужно, чтобы оба хода из xx попадали в AA, то есть x+1≥10x+1\ge10 и 2x≥102x\ge10, откуда x≥9x\ge9, значит B={9}B=\{9\}.

3. Табличный метод для двух куч. Состояние — пара (a,b)(a,b). Таблица строится по возрастанию суммы a+ba+b (или максимума), для каждой пары проверяются все допустимые ходы (изменение одной или обеих куч), позиция помечается В или П по тому же правилу. Пример: правило «увеличить любую кучу на 1» при финише при a+b≥4a+b\ge4. Тогда (1,1)(1,1): ходы в (2,1)(2,1) и (1,2)(1,2) — сумма 3, ещё не финиш, нужно смотреть их статус; в итоге классификация строится снизу вверх по сумме.

4. Симметрия и инварианты для двух куч. Если правила одинаковы для обеих куч, часто выигрывает игрок, который может уравнять кучи или довести разность до нуля/фиксированного значения — это упрощает анализ без полной таблицы. Пример: если ход — «переложить камень из одной кучи в другую», то при равных кучах любой ход нарушает равенство, а следующий игрок может его восстановить — значит позиция с равными кучами часто проигрышна для того, кто должен нарушить баланс.

Алгоритм решения по шагам

  1. Выписать порог окончания игры NN и диапазон начальных значений SS.
  2. Найти множество AA — позиции немедленного выигрыша, выразив условия каждой операции через неравенства относительно NN.
  3. Если нужно «не позже второго хода» — найти BB: позиции, не входящие в AA, из которых все ходы ведут в AA.
  4. Построить C=A∪{x:∃ x→y, y∈B}C = A \cup \{x : \exists\, x\to y,\ y\in B\}.
  5. Если по условию нужно «не позже третьего/четвёртого хода», аналогично строить следующие множества (по тому же принципу «все ходы соперника из позиции ведут в уже построенное множество»).
  6. Перебрать SS от минимального (или максимального, если ищется наибольшее) значения и для каждого проверить: все ли ходы из SS попадают в нужное множество (например CC), и выполняется ли дополнительное условие (например «не все ходы из SS попадают в AA»).
  7. Зафиксировать первое подходящее SS и убедиться, что меньшие (или бОльшие) значения не подходят — это защищает от ошибки в границах.

Разбор примеров

Пример 1. Ходы: +1+1, +4+4, ×5\times 5; порог N=68N=68; диапазон 1≤S≤671\le S\le 67.

Шаг 1. Множество AA: нужно x+1≥68x+1\ge68, или x+4≥68x+4\ge68, или 5x≥685x\ge68. Последнее условие x≥13,6x\ge13{,}6, то есть x≥14x\ge14, покрывает и первые два. Значит A=[14,67]A=[14,67].

Шаг 2. Множество BB ищем среди x≤13x\le13: нужно, чтобы x+1x+1, x+4x+4, 5x5x все были в A=[14,67]A=[14,67]. Условие x+1≥14x+1\ge14 даёт x≥13x\ge13. Проверка x=13x=13: ходы дают 14, 17, 65 — все в AA. Значит B={13}B=\{13\}.

Шаг 3. Множество C=A∪{x:C = A \cup \{x: ход из xx ведёт в 13}\}. Кто может дойти до 13: x+1=13⇒x=12x+1=13\Rightarrow x=12; x+4=13⇒x=9x+4=13\Rightarrow x=9. Значит C=[14,67]∪{9,12}C = [14,67]\cup\{9,12\}.

Шаг 4. Перебор SS: нужно, чтобы все три хода из SS (S+1S+1, S+4S+4, 5S5S) попали в CC, и не все — в AA.

Проверка S=8S=8: ходы дают 9, 12, 40. Все три числа в CC (9 и 12 — отдельно добавленные элементы, 40 — в [14,67][14,67]). При этом 9 и 12 не входят в AA, значит второе условие тоже выполнено.

Проверка меньших значений (S=1…7S=1\ldots7) показывает, что хотя бы один из ходов не попадает в CC (например, при S=7S=7 ходы дают 8, 11, 35, а 8 и 11 не входят в CC). Значит минимальное подходящее S=8S=8, что совпадает с ответом.

Пример 2. Ходы: +1+1, +3+3, ×2\times2; порог N=42N=42.

AA: условие 2x≥42⇒x≥212x\ge42 \Rightarrow x\ge21 покрывает и остальные операции, значит A=[21,41]A=[21,41].

BB среди x≤20x\le20: нужно x+1≥21x+1\ge21, то есть x≥20x\ge20. Проверка x=20x=20: ходы 21, 23, 40 — все в AA. B={20}B=\{20\}.

CC: кто ходом попадает в 20? x+1=20⇒x=19x+1=20\Rightarrow x=19; x+3=20⇒x=17x+3=20\Rightarrow x=17; 2x=20⇒x=102x=20\Rightarrow x=10. C=[21,41]∪{10,17,19}C=[21,41]\cup\{10,17,19\}.

Проверка S=16S=16: ходы дают 17, 19, 32 — все три в CC, и 17, 19 не в AA. Условие выполняется. Меньшие значения S=9…15S=9\ldots15 дают хотя бы один ход вне CC (проверяется прямой подстановкой). Минимальное S=16S=16 совпадает с ответом.

Пример 3. Ходы: +1+1, +4+4, ×2\times2; порог N=48N=48.

AA: 2x≥48⇒x≥242x\ge48 \Rightarrow x\ge24, это условие покрывает остальные. A=[24,47]A=[24,47].

BB среди x≤23x\le23: нужно x+1≥24x+1\ge24, то есть x≥23x\ge23. Проверка x=23x=23: ходы 24, 27, 46 — все в AA. B={23}B=\{23\}.

CC: кто ходом попадает в 23? x+1=23⇒x=22x+1=23\Rightarrow x=22; x+4=23⇒x=19x+4=23\Rightarrow x=19 (умножение на 2 не даёт целого решения). C=[24,47]∪{19,22}C=[24,47]\cup\{19,22\}.

Проверка S=18S=18: ходы дают 19, 22, 36 — все в CC, при этом 19 и 22 не входят в AA. Условие выполняется. Проверка S=9…17S=9\ldots17 показывает отсутствие хотя бы одного попадания в CC. Минимальное S=18S=18 совпадает с ответом.

Во всех трёх примерах видна одна и та же схема: сначала аналитически находится AA через неравенство для самой «сильной» операции (обычно умножения), затем BB — единственная (или несколько) точка на границе, затем CC — объединение AA с прообразами точек из BB, и наконец перебор небольшого диапазона SS для нахождения минимального значения.

Типичные ошибки и ловушки

  • Путают «выиграть не позже второго хода» с обычной выигрышной стратегией — забывают, что нужно гарантировать успех именно к определённому ходу, а не когда-либо.
  • Забывают проверить второе условие задачи (например, «нет стратегии выиграть первым ходом») и останавливаются после нахождения множества CC.
  • В множество BB включают позицию, для которой ходом соперника можно попасть в AA, но не всеми ходами — для BB нужно, чтобы абсолютно все доступные ходы вели в AA.
  • Ошибаются на границе неравенств: «не менее NN» означает ≥N\ge N, а не >N>N; пропуск этой детали сдвигает все множества на единицу.
  • Для двух куч забывают, что ход может менять только одну кучу или обе сразу — нужно внимательно перечислить все варианты хода, иначе множество позиций строится неверно.
  • При переборе SS проверяют только один из возможных ходов противника, хотя условие «при любой игре Пети» требует проверки всех вариантов хода.
  • Считают, что раз камней «неограниченное количество», то некоторые ходы могут быть недоступны — на самом деле все операции всегда разрешены независимо от текущего числа камней.

Как готовиться

  • Прорешать 15–20 задач с одной кучей и отдельно 10–15 задач с двумя кучами из открытого банка заданий, начиная с более простых пунктов (найти любое выигрышное SS, затем количество таких SS, и только потом — тонкие условия про порядок хода).
  • Тренировать построение множеств AA, BB, CC аналитически через неравенства, а не полным перебором — это сильно ускоряет решение на экзамене.
  • Проверять оба условия задачи как отдельный чек-лист: «выигрывает не позже нужного хода» и «не может выиграть раньше» — потеря баллов чаще всего происходит из-за игнорирования второго условия.
  • Для самопроверки допустимо один раз построить полную таблицу В/П вручную для небольшого NN, чтобы прочувствовать логику обратного анализа, прежде чем переходить на аналитические неравенства.
  • Разобрать отдельно несколько задач с двумя кучами, где ход затрагивает обе кучи одновременно — это самый частый источник ошибок из-за роста числа вариантов ходов.
  • Перед экзаменом решить 3–5 задач на время, фиксируя, сколько минут занимает построение всех нужных множеств — это задание требует аккуратности, а не скорости, поэтому важно не торопиться на границах интервалов.

Частые вопросы

Чем отличается «выиграть первым ходом» от «выиграть не позже второго хода»?

Выиграть первым ходом означает, что при любом ходе соперника у игрока сразу есть ход, доводящий кучу до N или больше. Выиграть не позже второго хода — более слабое условие: разрешается, что после первого хода игра не завершится, но тогда при любом следующем ходе соперника у игрока обязательно найдётся выигрывающий второй ход.

Как определить множество A без полного перебора?

Нужно выписать для каждой операции неравенство вида x + k ≥ N или m·x ≥ N и решить его относительно x. Множество A — это объединение решений всех неравенств, обычно оно сводится к одному интервалу, заданному самой сильной операцией (чаще умножением).

Почему множество B иногда состоит из одного числа?

Потому что условие «все ходы из x ведут в A» очень строгое: как только x увеличивается на единицу, хотя бы один из ходов (обычно самый маленький прирост) перестаёт попадать в A. Поэтому B часто оказывается единственной граничной точкой.

Нужно ли в ответе словами описывать сам выигрывающий ход?

В части заданий, требующих полного обоснования (развёрнутый ответ), да — нужно указать конкретное правило хода для каждой ситуации. В части, где требуется только число S, достаточно верного значения, но при проверке экспертом важна логика получения ответа.

Как быстро проверить два куч без построения полной таблицы?

Если правила симметричны относительно куч, часто помогает анализ через сумму или разность куч: свести пару (a,b) к одному числу-инварианту и применить обычный анализ выигрышных и проигрышных позиций для этого инварианта.

Что делать, если получается два разных значения S, оба подходят по условиям?

Нужно перечитать формулировку: требуется минимальное или максимальное S, либо количество подходящих значений. Всегда явно проверяйте, какую именно величину просит найти конкретный пункт задания.

Можно ли решать это задание программированием на экзамене?

На бумажном экзамене нет, но при подготовке дома полезно написать короткую программу для проверки построенных вручную множеств A, B, C — это помогает находить ошибки в границах интервалов до реального экзамена.