решай.ai · шпаргалка

Задание 20: Выигрышная стратегия. Задание 2

ЕГЭ Информатика

Как выглядит

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

  • он не может выиграть за один ход;
  • он гарантированно выигрывает своим вторым ходом, независимо от игры второго игрока (Вани).

…

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

  • Позиция — состояние игры, то есть количество камней в куче (для одной кучи) или пара чисел (x,y)(x,y) (для двух куч).
  • Выигрышная позиция (В) — позиция, из которой игрок, делающий ход, может гарантированно довести игру до победы при любых ответах соперника.
  • Проигрышная позиция (Л) — позиция, из которой любой ход ведёт в выигрышную позицию для соперника.
  • Ход: если разрешены операции «добавить aa», «добавить bb», «умножить на kk», то из позиции xx достижимы позиции x+a,  x+b,  kxx+a,\; x+b,\; kx.
  • Условие завершения игры: игра заканчивается, когда позиция x≥Nx \ge N; сделавший такой ход побеждает.
  • Множество F1F_1 — позиции, из которых можно выиграть одним ходом: F1={x<N:  x+a≥N ∨ x+b≥N ∨ kx≥N}.F_1=\{x<N:\; x+a\ge N \ \lor\ x+b\ge N \ \lor\ kx\ge N\}.
  • Множество F2F_2 — позиции, из которых игрок гарантированно выигрывает своим вторым ходом. Это те t∉F1t\notin F_1, для которых все возможные ходы соперника переводят игру в позицию из F1F_1, и при этом ни один ход соперника не завершает игру раньше времени: F2={t∉F1:  (t+a∈F1)∧(t+b∈F1)∧(kt∈F1),  все результаты<N}.F_2=\{t\notin F_1:\; (t+a\in F_1)\land(t+b\in F_1)\land(kt\in F_1),\; \text{все результаты}<N\}.
  • Общий принцип: FkF_k строится через Fk−1F_{k-1} по той же логике — обратная индукция от конца игры.

Алгоритм

  1. Выпишите порог NN и разрешённые операции (например, +a+a, +b+b, ×k\times k).
  2. Постройте множество F1F_1: решите неравенства x+a≥Nx+a\ge N, x+b≥Nx+b\ge N, kx≥Nkx\ge N и объедините решения — это позиции, из которых можно выиграть одним ходом.
  3. Найдите дополнение к F1F_1 на отрезке [1,N−1][1,N-1] — назовём его «не-F1F_1». Это позиции, из которых первым ходом победить нельзя.
  4. Постройте множество F2F_2: среди чисел не-F1F_1 найдите такие tt, что все три результата ходов из tt (t+at+a, t+bt+b, ktkt) одновременно строго меньше NN и принадлежат F1F_1. Обязательно проверяйте оба условия — если хотя бы один ход соперника заканчивает игру (≥N\ge N), такое tt не подходит, потому что тогда выиграет соперник, а не наш игрок. …

Ловушки

  • Забывают проверить, что ход соперника не завершает игру досрочно. Если хотя бы один из ходов из tt даёт результат ≥N\ge N, соперник сам выиграет этим ходом — такое tt нельзя включать в F2F_2, даже если оставшиеся ходы формально попадают в F1F_1.
  • Путают «существует ход» и «все ходы». Для F1F_1 достаточно существования хотя бы одного выигрывающего хода. Для F2F_2 требуется, чтобы абсолютно все ходы соперника вели в F1F_1 — здесь нельзя ослаблять условие.
  • Не проверяют целочисленность и границы. При решении уравнений вида kS=tkS=t важно убирать нецелые и выходящие за диапазон 1≤S≤N−11\le S\le N-1 решения.
  • Путают порядок операций умножения и сложения при построении F1F_1. Умножение обычно расширяет множество сильнее сложения — стоит явно решить неравенство для каждой операции отдельно и объединить результаты. …
reshay.ai/ege/informatika/zadanie-20 — задачи с разборами и тренажёр

Полный гайд и задачи задания 20 →