Задание 20 ЕГЭ по информатике: кучи камней и выигрышная стратегия
Подтемы
Что проверяет задание
Задание 20 проверяет умение анализировать игру двух участников с полной информацией и конечным числом ходов. Нужно построить логику «от конца игры к началу» — определить, какие позиции выигрышные, какие проигрышные, и на основе этого найти конкретные числовые значения начального количества камней , удовлетворяющие условиям задачи. Здесь проверяются не программирование и не перебор кода, а строгая логика и аккуратная работа с неравенствами и множествами чисел.
Задача моделирует игру: есть куча (или две кучи) камней, игроки по очереди делают ходы по фиксированным правилам, игра заканчивается, когда количество камней достигает порога , победителем становится тот, кто сделал последний ход. Обычно рассматриваются три связанные подзадачи, и задание, о котором идёт речь, — вторая из них: нужно найти значения , при которых первый игрок не может выиграть за один ход, но гарантированно выигрывает своим вторым ходом.
Как выглядит формулировка и сколько баллов
Типичная формулировка: два игрока по очереди изменяют кучу камней — добавляют определённое число камней или умножают кучу на константу. Игра завершается, когда куча становится не менее . Победил тот, кто сделал последний ход. Задано, что . Нужно найти все значения , при которых первый игрок (обычно Петя) имеет выигрышную стратегию, причём одновременно:
- он не может выиграть за один ход;
- он гарантированно выигрывает своим вторым ходом, независимо от игры второго игрока (Вани).
Это задание входит в блок из трёх пунктов (20.1, 20.2, 20.3), каждый оценивается в 1 балл, то есть всё задание может принести до 3 баллов. Ответ записывается как последовательность цифр — найденные значения в порядке возрастания без разделителей.
Что нужно знать
- Позиция — состояние игры, то есть количество камней в куче (для одной кучи) или пара чисел (для двух куч).
- Выигрышная позиция (В) — позиция, из которой игрок, делающий ход, может гарантированно довести игру до победы при любых ответах соперника.
- Проигрышная позиция (Л) — позиция, из которой любой ход ведёт в выигрышную позицию для соперника.
- Ход: если разрешены операции «добавить », «добавить », «умножить на », то из позиции достижимы позиции .
- Условие завершения игры: игра заканчивается, когда позиция ; сделавший такой ход побеждает.
- Множество — позиции, из которых можно выиграть одним ходом:
- Множество — позиции, из которых игрок гарантированно выигрывает своим вторым ходом. Это те , для которых все возможные ходы соперника переводят игру в позицию из , и при этом ни один ход соперника не завершает игру раньше времени:
- Общий принцип: строится через по той же логике — обратная индукция от конца игры.
Методы решения
1. Обратная индукция для одной кучи со сложением. Строим как множество чисел, близких к порогу — обычно это непрерывный отрезок , где — наибольший шаг сложения. Пример: если ходы и , , то , так как .
2. Обратная индукция с умножением. Умножение обычно расширяет «вниз» сильнее, чем сложение, поэтому именно операция умножения часто определяет левую границу множества. Пример: ход , добавляет в все , так как .
3. Анализ периодичности (для больших ). Если множество — сплошной интервал, часто оказывается, что и вся структура В/Л-позиций периодична с шагом, равным сумме или НОК шагов ходов. Это полезно для задач с большим диапазоном , где перебор занял бы много времени.
4. Двумерный анализ для двух куч. Если есть две кучи , а ход — это изменение одной из них (например, добавить камни в одну кучу или удвоить одну кучу), позицию нужно рассматривать как пару. Множества строятся аналогично, но состоят из пар чисел; часто удаётся свести задачу к одной переменной — сумме или максимуму , если правила симметричны относительно куч.
5. Табличный перебор для контроля. Для небольших полезно построить таблицу «позиция — статус (В/Л) — куда ведут ходы» вручную от до . Это медленный, но безошибочный способ проверки правильности построенных множеств .
Алгоритм решения по шагам
- Выпишите порог и разрешённые операции (например, , , ).
- Постройте множество : решите неравенства , , и объедините решения — это позиции, из которых можно выиграть одним ходом.
- Найдите дополнение к на отрезке — назовём его «не-». Это позиции, из которых первым ходом победить нельзя.
- Постройте множество : среди чисел не- найдите такие , что все три результата ходов из (, , ) одновременно строго меньше и принадлежат . Обязательно проверяйте оба условия — если хотя бы один ход соперника заканчивает игру (), такое не подходит, потому что тогда выиграет соперник, а не наш игрок.
- Найдите искомые : среди чисел не- отберите те, из которых хотя бы одним ходом можно попасть в множество (решите уравнения , , для каждого , проверяя целочисленность и попадание в допустимый диапазон).
- Отсортируйте найденные значения по возрастанию и запишите ответ подряд без разделителей.
Разбор примеров
Пример 1. Порог , ходы: , , .
Шаг 1 — строим : решаем (), (), (, то есть ). Самое слабое условие — , оно покрывает и остальные. Значит , а не-.
Шаг 2 — строим среди . Нужно, чтобы были одновременно и . Условие даёт . Условие даёт . Значит единственное подходящее значение — . Проверка: , , — все три числа лежат в и меньше . Значит .
Шаг 3 — ищем , из которого один ход даёт : ; ; — не целое. Получаем и .
Ответ: 912.
Пример 2. Порог , ходы: , , .
: (), (), (). Слабейшее условие покрывает остальные, поэтому , не-.
: нужно одновременно и . Из следует . Из следует . Значит . Проверка: , , — всё в и меньше . .
Ищем : ; ; .
Ответ по возрастанию: 101719.
Пример 3. Порог , ходы: , , .
: , , — самое слабое условие . Значит , не-.
: нужно одновременно и . . . Значит . Проверка: , , — всё подходит. .
Ищем : ; ; — не целое.
Ответ по возрастанию: 1922.
Во всех трёх примерах видна одна и та же логика: сначала находится единственная (или несколько) «переходная» позиция , из которой соперник обязан подарить победу, а затем ищутся ходы, ведущие именно в эту позицию.
Типичные ошибки и ловушки
- Забывают проверить, что ход соперника не завершает игру досрочно. Если хотя бы один из ходов из даёт результат , соперник сам выиграет этим ходом — такое нельзя включать в , даже если оставшиеся ходы формально попадают в .
- Путают «существует ход» и «все ходы». Для достаточно существования хотя бы одного выигрывающего хода. Для требуется, чтобы абсолютно все ходы соперника вели в — здесь нельзя ослаблять условие.
- Не проверяют целочисленность и границы. При решении уравнений вида важно убирать нецелые и выходящие за диапазон решения.
- Путают порядок операций умножения и сложения при построении . Умножение обычно расширяет множество сильнее сложения — стоит явно решить неравенство для каждой операции отдельно и объединить результаты.
- Для двух куч забывают рассмотреть ход по каждой из куч отдельно. Нужно перебрать все допустимые операции применительно к и к по отдельности, а не только к их сумме.
- Путают, кто первый ходит. Если по условию первым ходит не тот игрок, для которого ищется стратегия, знаки и порядок множеств нужно интерпретировать относительно чужого хода.
Как готовиться
- Начните с ручного построения таблицы позиций для маленьких значений (10–20), чтобы прочувствовать логику В/Л-позиций без спешки.
- Освойте формальную запись множеств через неравенства — это ускоряет решение и снижает число ошибок по сравнению с полным перебором.
- Прорешайте задачи всех трёх типов подряд (обычная стратегия, победа вторым ходом, подсчёт количества стратегий), чтобы видеть общую структуру и различия между ними.
- Для самоконтроля напишите короткую программу (даже на псевдокоде), которая строит множества автоматически, и сравнивайте с ручным решением — так быстро находятся ошибки в границах.
- Регулярно решайте задачи с разными комбинациями операций: только сложение, сложение и умножение, сложение и деление — чтобы не привыкать к одному шаблону.
- Отдельно потренируйтесь на теме «две кучи»: там важно аккуратно перебирать ходы по каждой куче и следить, не сводится ли задача к анализу одной переменной (суммы или разности).
Частые вопросы
Что означает «выигрышная стратегия» в этих задачах?
Это возможность игрока выбирать ходы так, чтобы гарантированно победить при любых действиях соперника, а не только при удачном для него раскладе.
Как найти множество F1?
Нужно решить неравенства для каждой разрешённой операции (сложение, умножение), при которых результат хода становится не меньше порога N, и объединить полученные решения.
Почему важно проверять, что ход соперника не завершает игру раньше времени?
Если ход соперника из позиции t сразу даёт результат больше или равный порогу, то победителем становится соперник, а не тот, для кого строится стратегия, поэтому такую позицию t нельзя включать в множество F2.
Чем отличается задача про одну кучу от задачи про две кучи?
В задаче с одной кучей позиция описывается одним числом, а в задаче с двумя кучами — парой чисел, и ход применяется к одной из двух куч, поэтому множества позиций строятся в двумерном виде.
Нужно ли учитывать порядок ходов при построении F2?
Да, F2 строится относительно всех возможных ходов соперника из промежуточной позиции: обязательно проверяются все варианты его хода, а не только один удобный.
Как проверить правильность найденных значений S?
Можно построить таблицу позиций вручную для небольшого диапазона чисел рядом с порогом N и убедиться, что логика ходов совпадает с построенными множествами F1 и F2.
Что делать, если операций хода больше двух-трёх?
Принцип остаётся тот же: для каждой операции решается своё неравенство при построении F1, а при построении F2 проверяется, что все операции без исключения ведут в F1.