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

Подтемы

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

Задание 19 открывает блок из трёх заданий (19–21), объединённых общим условием об игре двух игроков с кучей (или несколькими кучами) камней. Проверяется умение анализировать позиции игры «с конца», строить дерево возможных ходов, определять, какая позиция выигрышная, а какая проигрышная, и находить конкретные числовые параметры (минимальное или максимальное начальное количество камней SS), при которых реализуется заданный сценарий партии. По сути это задача на дискретную математику и логику: комбинаторный анализ конечного множества чисел и операций над ними.

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

Стандартная формулировка: два игрока (обычно Петя и Ваня) по очереди совершают ходы над кучей камней, добавляя фиксированное число камней или умножая кучу на постоянный множитель. Первый ход делает Петя. Игра заканчивается, когда количество камней становится не меньше заданного числа NN. Победитель — тот, кто сделал последний ход. Задание 19 обычно спрашивает про частный, «короткий» сценарий: при каком минимальном (реже максимальном) значении SS возможно, что первый ход Пети оказался неудачным (не привёл к победе), а Ваня своим первым ответным ходом сразу выиграл.

Задание оценивается 1 баллом, относится к повышенному уровню сложности второй части экзамена. Ответ — целое число, записывается без пояснений (пояснения нужны только на бумаге для самопроверки).

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

  • Позиция игры — число камней в куче в момент, когда очередной игрок должен сделать ход, обозначим SS.
  • Ход — операция, переводящая SS в новое значение по правилам задачи: S→S+aS \to S+a, S→S+bS \to S+b, S→kSS \to kS.
  • Финальная (терминальная) позиция — позиция, при которой игра завершена: S≥NS \ge N, где NN — заданный порог.
  • Выигрывает тот, кто сделал ход, приведший к финальной позиции.
  • Позиция выигрышная (В), если из неё существует хотя бы один ход в проигрышную позицию соперника или прямо в финал.
  • Позиция проигрышная (П), если все возможные ходы из неё ведут в выигрышные позиции соперника.
  • Метод обратной индукции: классификация всех позиций от границы NN вниз до начала диапазона.
  • Множество «предпобедных» позиций: M={S′:S′<N, ∃ ход f, f(S′)≥N}M=\{S' : S'<N,\ \exists\, \text{ход } f,\ f(S')\ge N\}.
  • Для темы «две кучи» позиция описывается парой (a,b)(a,b), ход применяется к одной или обеим кучам, а финал определяется условием на сумму, максимум или конкретную кучу.

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

Метод 1. Таблица В/П с конца. Берём числа от N−1N-1 вниз до нижней границы диапазона и определяем для каждого В или П. Число — П, если все ходы из него ведут в В; иначе — В. Пример: ходы +1+1 и ×2\times2, N=6N=6. Для S=5S=5: ход даёт 6≥N6\ge N — выигрыш сразу, значит 5 — В. Для S=2S=2: ходы дают 3 (В) и 4; из 4 ход ×2=8≥N\times2=8\ge N — В; значит все ходы из 2 ведут в В, поэтому 2 — П.

Метод 2. Поиск предпобедных позиций. Если спрашивают про сценарий «неудачный ход Пети — победа Вани первым ходом», достаточно найти множество MM позиций, из которых один ход завершает игру, а затем найти, из каких SS можно попасть в MM. Пример: ходы +1+1, ×3\times3, N=20N=20. Условие S′+1≥20S'+1\ge20 даёт S′≥19S'\ge19, условие 3S′≥203S'\ge20 даёт S′≥7S'\ge7. Объединение: M={7,…,19}M=\{7,\dots,19\}.

Метод 3. Аналитическая оценка через неравенства. Каждый ход — монотонная функция от SS, поэтому условие «попасть в диапазон» превращается в решаемое неравенство. Пример: для хода ×2\times2 условие «попасть в [24,47][24,47]» даёт 2S≥242S\ge24 и 2S≤472S\le47, то есть 12≤S≤2312\le S\le23.

Метод 4. Работа с двумя кучами. Позиция — пара (a,b)(a,b). Ходы применяются к одной или обеим кучам, финал обычно связан с суммой a+b≥Na+b\ge N либо с одной из куч. Пример: кучи (3,5)(3,5), ход — добавить 1 камень в любую кучу, победа при a+b≥10a+b\ge10. Сумма равна 8; следующий ход даёт 9 (не финал), после него — 10 (финал). Значит из суммы 9 любой ход выигрывает, а из суммы 8 все ходы ведут в 9 — то есть 8 является проигрышной суммой для того, кто должен из неё ходить.

Метод 5. Программный перебор. Если границы велики, полезно смоделировать процесс в псевдокоде: рекурсивно определить функцию win(S)win(S), перебирая все возможные ходы. Это надёжный способ проверить ответ, полученный аналитически.

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

  1. Выписать все операции хода и число NN.
  2. Определить множество финальных значений: S≥NS\ge N.
  3. Построить множество предпобедных позиций MM: все S′<NS'<N, из которых хотя бы один ход даёт результат ≥N\ge N. Решить неравенства для каждой операции, взять объединение диапазонов, отсекая значения ≥N\ge N.
  4. Для каждой операции хода Пети найти диапазон SS, при котором результат попадает в MM.
  5. Взять минимум (или максимум, если требуется) по всем операциям — это искомое значение.
  6. Проверить контрольные соседние значения SS, чтобы убедиться, что более выгодного варианта нет.
  7. Если задание спрашивает максимум, действовать аналогично, учитывая верхнюю границу диапазона S≤N−1S\le N-1.

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

Пример 1. Ходы: S+1S+1, S+4S+4, 5S5S; порог N=68N=68. Нужно минимальное SS, при котором Петя сходил неудачно, а Ваня выиграл первым ходом.

Шаг 1. Находим MM: условия S′+1≥68⇒S′≥67S'+1\ge68\Rightarrow S'\ge67; S′+4≥68⇒S′≥64S'+4\ge68\Rightarrow S'\ge64; 5S′≥68⇒S′≥13,6⇒S′≥145S'\ge68\Rightarrow S'\ge13{,}6\Rightarrow S'\ge14. Самое слабое ограничение даёт умножение: M={14,…,67}M=\{14,\dots,67\}.

Шаг 2. Ищем минимальное SS, из которого ход Пети попадает в MM:

  • S+1∈M⇒S≥13S+1\in M\Rightarrow S\ge13;
  • S+4∈M⇒S≥10S+4\in M\Rightarrow S\ge10;
  • 5S∈M⇒5S≥14⇒S≥35S\in M\Rightarrow 5S\ge14\Rightarrow S\ge3 (при 5S<68⇒S≤135S<68\Rightarrow S\le13).

Минимум среди {13,10,3}\{13,10,3\} равен 3.

Шаг 3. Проверка: при S=3S=3 ход Пети 5⋅3=15∈M5\cdot3=15\in M; из 15 Ваня делает 5⋅15=75≥685\cdot15=75\ge68 — победа. Ход Пети сам не завершил игру (15<6815<68).

Шаг 4. Для S=1,2S=1,2: ходы дают числа меньше 14, значит меньших вариантов нет. Ответ: S=3S=3.

Пример 2. Ходы: S+1S+1, S+3S+3, 2S2S; N=42N=42.

Шаг 1. Условия: S′+1≥42⇒S′≥41S'+1\ge42\Rightarrow S'\ge41; S′+3≥42⇒S′≥39S'+3\ge42\Rightarrow S'\ge39; 2S′≥42⇒S′≥212S'\ge42\Rightarrow S'\ge21. Слабейшее ограничение даёт умножение: M={21,…,41}M=\{21,\dots,41\}.

Шаг 2. Минимальное SS:

  • S+1∈M⇒S≥20S+1\in M\Rightarrow S\ge20;
  • S+3∈M⇒S≥18S+3\in M\Rightarrow S\ge18;
  • 2S∈M⇒S≥112S\in M\Rightarrow S\ge11 (и S≤20S\le20).

Минимум среди {20,18,11}\{20,18,11\} равен 11.

Шаг 3. Проверка: при S=11S=11 ход 2⋅11=22∈M2\cdot11=22\in M; из 22 ход 2⋅22=44≥422\cdot22=44\ge42 — победа. Ход Пети не финиширует (22<4222<42).

Шаг 4. Для S=10S=10: ходы дают 11, 13, 20 — все меньше 21, значит меньше 11 не получится. Ответ: S=11S=11.

Пример 3. Ходы: S+1S+1, S+4S+4, 2S2S; N=48N=48.

Шаг 1. Условия: S′+1≥48⇒S′≥47S'+1\ge48\Rightarrow S'\ge47; S′+4≥48⇒S′≥44S'+4\ge48\Rightarrow S'\ge44; 2S′≥48⇒S′≥242S'\ge48\Rightarrow S'\ge24. Объединение: M={24,…,47}M=\{24,\dots,47\}.

Шаг 2. Минимальное SS:

  • S+1∈M⇒S≥23S+1\in M\Rightarrow S\ge23;
  • S+4∈M⇒S≥20S+4\in M\Rightarrow S\ge20;
  • 2S∈M⇒S≥122S\in M\Rightarrow S\ge12 (и S≤23S\le23).

Минимум среди {23,20,12}\{23,20,12\} равен 12.

Шаг 3. Проверка: при S=12S=12 ход 2⋅12=24∈M2\cdot12=24\in M; из 24 ход 2⋅24=48≥482\cdot24=48\ge48 — победа Вани. Ход Пети не завершил игру (24<4824<48).

Шаг 4. Для S=11S=11: ходы дают 12, 15, 22 — все меньше 24, значит 12 — минимальное значение. Ответ совпадает с искомым.

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

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

  • Забывают проверить, что ход Пети сам не выигрышный (результат должен быть строго меньше NN), из-за чего множество MM строится неверно.
  • Ищут только по одной операции (например, только по сложению), забывая, что множитель обычно даёт более широкий диапазон и меньшее значение SS.
  • Путают направление неравенства: для сложения S+a≥NS+a\ge N даёт S≥N−aS\ge N-a, а для умножения kS≥NkS\ge N даёт S≥N/kS\ge N/k с округлением вверх, так как SS целое.
  • Не проверяют условие S′<NS'<N при построении MM, из-за чего в множество ошибочно попадают уже финальные позиции.
  • Путают задачу на минимум с задачей на максимум при невнимательном чтении условия.
  • В задачах с двумя кучами забывают, что ход может применяться выборочно к одной из куч, и упускают часть возможных ходов при построении таблицы.
  • Не делают финальную проверку граничных значений, из-за чего пропускают более выгодный вариант ответа.

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

Начинать стоит с построения полной таблицы В/П вручную на небольших числах (до 15–20), чтобы прочувствовать механику обратной индукции — от финала к началу. Затем перейти к разбору частных формулировок задания 19: «выигрыш первым ходом», «выигрыш вторым ходом», «количество значений SS» — каждая формулировка требует немного разного алгоритма, но опирается на одно и то же понятие предпобедных и проигрышных позиций. Полезно решать несколько задач подряд, каждый раз выписывая ходы в виде формул и решая систему неравенств явно, не полагаясь на интуицию. Хорошим тренажёром служит короткая программа, которая перебором проверяет функцию win(S)win(S) для всех SS в заданном диапазоне — это позволяет быстро находить ошибки в ручных вычислениях. Отдельно нужно потренироваться на задачах с двумя кучами: важно аккуратно перечислять все допустимые ходы (к одной куче, к другой, иногда к обеим одновременно) и не забывать про условие завершения игры, которое может зависеть от суммы, максимума или конкретной кучи. После каждой решённой задачи стоит подставлять найденное значение обратно в условие и проверять, что сценарий партии полностью соответствует описанному в тексте задания.

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

Как понять, кто из игроков имеет выигрышную стратегию с самого начала игры?

Нужно построить таблицу выигрышных (В) и проигрышных (П) позиций методом обратной индукции от финальной границы NN до начального значения SS. Если начальная позиция В — стратегия есть у того, кто ходит первым; если П — у второго игрока.

Что делать, если среди ходов есть вычитание или деление?

Принцип не меняется: каждая операция задаёт функцию, переводящую SS в новое значение. Нужно только аккуратно учитывать ограничения (например, результат не должен становиться отрицательным) при составлении неравенств для множества MM.

Как быстрее найти множество предпобедных позиций без перебора всех чисел от 1 до N?

Достаточно для каждой операции хода решить неравенство f(S′)≥Nf(S')\ge N относительно S′S' и взять объединение полученных диапазонов, ограничив их сверху условием S′<NS'<N.

Чем отличается анализ для двух куч от анализа для одной кучи?

Позиция описывается не одним числом, а парой (a,b)(a,b), и ход может применяться к одной из куч или к обеим сразу. Таблицу В/П строят по тому же принципу обратной индукции, но перебор ведут по возрастанию суммы или другого показателя, определяющего финал.

Что значит фраза «не включать ходы, не являющиеся безусловно выигрышными»?

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

Как проверить правильность найденного ответа?

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

Важен ли порядок, в котором рассматриваются операции хода при построении диапазонов?

Нет, порядок не важен: для каждой операции диапазон находится отдельно, а итоговый ответ — это минимум (или максимум) среди всех полученных диапазонов, поэтому результат не зависит от последовательности анализа.