ЕГЭ по информатике · задание 20

Теория игр: Петя выигрывает вторым ходом

Та же игра, что в задании 19. Нужно найти значения S, при которых Петя гарантированно выигрывает своим вторым ходом, но не может выиграть первым.

Что ищем

  • Петя не выигрывает первым ходом.
  • Есть ход Пети в позицию, где Ваня проигрывает при любом своём ходе: после него Петя выигрывает.

Как решать

  1. Взять позиции из задания 19 (Ваня выигрывает первым ходом при любом ходе Пети).
  2. Найти S, из которых Петя может одним ходом попасть в такую позицию.
  3. Проверить программой: f(s, 3) and not f(s, 1).

Типичные ошибки

  • Не исключить значения, где Петя выигрывает первым ходом.
  • Записать ответ не по возрастанию.

Разобранные варианты

Сначала реши сам, потом открой разбор.

Вариант 1

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 1 камень;
– убрать из кучи 7 камней;
– уменьшить количество камней в куче в 2 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 45 камней за один ход можно получить кучу из 44, 38, 22 камней. Игра завершается, когда количество камней в куче становится не более 25. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 25 или менее камней. В начальный момент в куче было S камней, S ≥ 26.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 53. Петя ходит в 52 — это позиция, где при любом ходе Вани (в 26, 45, 51) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
50Петя выигрывает 1-м ходом
51Петя выигрывает 1-м ходом
52Ваня выигрывает 1-м ходом
53Петя выигрывает 2-м ходом
54Ваня выигрывает 1-м или 2-м ходом
55Петя выигрывает 3-м ходом
56Ваня выигрывает не позднее 3-го хода
57Петя выигрывает 4-м ходом
58Ваня выигрывает не позднее 4-го хода
59Петя выигрывает 2-м ходом
60Ваня выигрывает 1-м или 2-м ходом
61Петя выигрывает 3-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 53 59

Решение на Python.

def f(s, m):
    if s <= 25:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s - 1, s - 7, s // 2)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(26, 425) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 2

одна куча, растёт

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в кучу 2 камня;
– добавить в кучу 4 камня;
– увеличить количество камней в куче в 3 раза.
Например, из кучи в 10 камней за один ход можно получить кучу из 12, 14, 30 камней. Игра завершается, когда количество камней в куче становится не менее 119. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 119 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 118.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 13. Петя ходит в 39 — это позиция, где при любом ходе Вани (в 41, 43, 117) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
10Петя выигрывает 6-м ходом
11Петя выигрывает 3-м ходом
12Петя выигрывает 6-м ходом
13Петя выигрывает 2-м ходом
14Ваня выигрывает не позднее 5-го хода
15Ваня выигрывает не позднее 5-го хода
16Петя выигрывает 5-м ходом
17Петя выигрывает 5-м ходом
18Петя выигрывает 5-м ходом
19Петя выигрывает 5-м ходом
20Ваня выигрывает не позднее 4-го хода
21Ваня выигрывает не позднее 4-го хода
22Петя выигрывает 4-м ходом
23Петя выигрывает 4-м ходом
24Петя выигрывает 4-м ходом
25Петя выигрывает 4-м ходом
26Ваня выигрывает не позднее 3-го хода
27Ваня выигрывает не позднее 3-го хода
28Петя выигрывает 3-м ходом
29Петя выигрывает 3-м ходом
30Петя выигрывает 3-м ходом
31Петя выигрывает 3-м ходом
32Ваня выигрывает 1-м или 2-м ходом
33Ваня выигрывает 1-м или 2-м ходом
34Петя выигрывает 2-м ходом
35Петя выигрывает 2-м ходом
36Петя выигрывает 2-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 13 34

Решение на Python.

def f(s, m):
    if s >= 119:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s + 2, s + 4, s * 3)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 119) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 3

две кучи

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в одну из куч 1 камень;
– увеличить количество камней в одной из куч в 3 раза.
Например, пусть в одной куче 10 камней, а в другой — 7; такую позицию обозначим (10, 7). За один ход из неё можно получить любую из позиций: (10, 8), (10, 21), (11, 7), (30, 7). Игра завершается, когда суммарное количество камней в кучах становится не менее 94. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 9 камней, во второй — S камней, 1 ≤ S ≤ 84.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 12. Петя ходит в (27, 12) — это позиция, где при любом ходе Вани (в (27, 13), (27, 36), (28, 12), (81, 12)) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
9Ваня выигрывает не позднее 3-го хода
10Петя выигрывает 3-м ходом
11Ваня выигрывает не позднее 14-го хода
12Петя выигрывает 2-м ходом
13Петя выигрывает 13-м ходом
14Ваня выигрывает не позднее 12-го хода
15Петя выигрывает 11-м ходом
16Ваня выигрывает не позднее 10-го хода
17Петя выигрывает 10-м ходом
18Ваня выигрывает не позднее 9-го хода
19Петя выигрывает 8-м ходом
20Ваня выигрывает не позднее 7-го хода
21Петя выигрывает 7-м ходом
22Ваня выигрывает не позднее 6-го хода
23Петя выигрывает 5-м ходом
24Ваня выигрывает не позднее 4-го хода
25Петя выигрывает 4-м ходом
26Ваня выигрывает не позднее 3-го хода
27Петя выигрывает 2-м ходом
28Ваня выигрывает 1-м ходом
29Петя выигрывает 1-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 12 27

Решение на Python.

def f(a, b, m):
    if a + b >= 94:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, y, m - 1) for x, y in ((a + 1, b), (a * 3, b), (a, b + 1), (a, b * 3))]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 85) if f(9, s, 3) and not f(9, s, 1)]
print(res[0], res[1])

Вариант 4

одна куча, растёт

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в кучу 1 камень;
– добавить в кучу 4 камня;
– увеличить количество камней в куче в 3 раза.
Например, из кучи в 10 камней за один ход можно получить кучу из 11, 14, 30 камней. Игра завершается, когда количество камней в куче становится не менее 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 66 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 65.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 7. Петя ходит в 21 — это позиция, где при любом ходе Вани (в 22, 25, 63) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
4Ваня выигрывает не позднее 5-го хода
5Петя выигрывает 5-м ходом
6Ваня выигрывает не позднее 4-го хода
7Петя выигрывает 2-м ходом
8Петя выигрывает 5-м ходом
9Ваня выигрывает не позднее 4-го хода
10Петя выигрывает 4-м ходом
11Ваня выигрывает не позднее 3-го хода
12Петя выигрывает 3-м ходом
13Петя выигрывает 4-м ходом
14Ваня выигрывает не позднее 3-го хода
15Петя выигрывает 3-м ходом
16Ваня выигрывает 1-м или 2-м ходом
17Петя выигрывает 2-м ходом
18Петя выигрывает 3-м ходом
19Ваня выигрывает 1-м или 2-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 7 17

Решение на Python.

def f(s, m):
    if s >= 66:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s + 1, s + 4, s * 3)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 66) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 5

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 1 камень;
– убрать из кучи 6 камней;
– уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 40 камней за один ход можно получить кучу из 39, 34, 13 камней. Игра завершается, когда количество камней в куче становится не более 20. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 20 или менее камней. В начальный момент в куче было S камней, S ≥ 21.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 64. Петя ходит в 63 — это позиция, где при любом ходе Вани (в 21, 57, 62) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
61Петя выигрывает 1-м ходом
62Петя выигрывает 1-м ходом
63Ваня выигрывает 1-м ходом
64Петя выигрывает 2-м ходом
65Ваня выигрывает 1-м или 2-м ходом
66Петя выигрывает 3-м ходом
67Ваня выигрывает не позднее 3-го хода
68Петя выигрывает 4-м ходом
69Петя выигрывает 2-м ходом
70Ваня выигрывает 1-м или 2-м ходом
71Петя выигрывает 3-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 64 69

Решение на Python.

def f(s, m):
    if s <= 20:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s - 1, s - 6, s // 3)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(21, 420) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 6

две кучи

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в одну из куч 1 камень;
– увеличить количество камней в одной из куч в 2 раза.
Например, пусть в одной куче 10 камней, а в другой — 7; такую позицию обозначим (10, 7). За один ход из неё можно получить любую из позиций: (10, 8), (10, 14), (11, 7), (20, 7). Игра завершается, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 5 камней, во второй — S камней, 1 ≤ S ≤ 71.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 33. Петя ходит в (10, 33) — это позиция, где при любом ходе Вани (в (10, 34), (10, 66), (11, 33), (20, 33)) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
30Петя выигрывает 4-м ходом
31Петя выигрывает 3-м ходом
32Ваня выигрывает 1-м или 2-м ходом
33Петя выигрывает 2-м ходом
34Ваня выигрывает 1-м или 2-м ходом
35Петя выигрывает 2-м ходом
36Петя выигрывает 1-м ходом
37Петя выигрывает 1-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 33 35

Решение на Python.

def f(a, b, m):
    if a + b >= 77:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, y, m - 1) for x, y in ((a + 1, b), (a * 2, b), (a, b + 1), (a, b * 2))]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 72) if f(5, s, 3) and not f(5, s, 1)]
print(res[0], res[1])

Вариант 7

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 2 камня;
– убрать из кучи 6 камней;
– уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 45 камней за один ход можно получить кучу из 43, 39, 15 камней. Игра завершается, когда количество камней в куче становится не более 25. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 25 или менее камней. В начальный момент в куче было S камней, S ≥ 26.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 80. Петя ходит в 78 — это позиция, где при любом ходе Вани (в 26, 72, 76) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
77Петя выигрывает 1-м ходом
78Ваня выигрывает 1-м ходом
79Ваня выигрывает 1-м ходом
80Петя выигрывает 2-м ходом
81Петя выигрывает 2-м ходом
82Ваня выигрывает 1-м или 2-м ходом
83Ваня выигрывает 1-м или 2-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 80 81

Решение на Python.

def f(s, m):
    if s <= 25:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s - 2, s - 6, s // 3)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(26, 425) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 8

одна куча, растёт

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в кучу 1 камень;
– добавить в кучу 4 камня;
– увеличить количество камней в куче в 3 раза.
Например, из кучи в 10 камней за один ход можно получить кучу из 11, 14, 30 камней. Игра завершается, когда количество камней в куче становится не менее 117. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 117 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 116.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 34. Петя ходит в 38 — это позиция, где при любом ходе Вани (в 39, 42, 114) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
31Ваня выигрывает не позднее 3-го хода
32Петя выигрывает 3-м ходом
33Ваня выигрывает 1-м или 2-м ходом
34Петя выигрывает 2-м ходом
35Петя выигрывает 3-м ходом
36Ваня выигрывает 1-м или 2-м ходом
37Петя выигрывает 2-м ходом
38Ваня выигрывает 1-м ходом
39Петя выигрывает 1-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 34 37

Решение на Python.

def f(s, m):
    if s >= 117:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s + 1, s + 4, s * 3)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 117) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Вариант 9

две кучи

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в одну из куч 2 камня;
– увеличить количество камней в одной из куч в 2 раза.
Например, пусть в одной куче 10 камней, а в другой — 7; такую позицию обозначим (10, 7). За один ход из неё можно получить любую из позиций: (10, 9), (10, 14), (12, 7), (20, 7). Игра завершается, когда суммарное количество камней в кучах становится не менее 58. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 12 камней, во второй — S камней, 1 ≤ S ≤ 45.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 8. Петя ходит в (24, 8) — это позиция, где при любом ходе Вани (в (24, 10), (24, 16), (26, 8), (48, 8)) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
5Петя выигрывает 5-м ходом
6Петя выигрывает 5-м ходом
7Ваня выигрывает не позднее 4-го хода
8Петя выигрывает 2-м ходом
9Петя выигрывает 2-м ходом
10Петя выигрывает 5-м ходом
11Петя выигрывает 2-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 8 9

Решение на Python.

def f(a, b, m):
    if a + b >= 58:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, y, m - 1) for x, y in ((a + 2, b), (a * 2, b), (a, b + 2), (a, b * 2))]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(1, 46) if f(12, s, 3) and not f(12, s, 1)]
print(res[0], res[1])

Вариант 10

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 1 камень;
– убрать из кучи 4 камня;
– уменьшить количество камней в куче в 2 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 40 камней за один ход можно получить кучу из 39, 36, 20 камней. Игра завершается, когда количество камней в куче становится не более 20. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 20 или менее камней. В начальный момент в куче было S камней, S ≥ 21.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Разбор

Рассуждение. Нужны позиции, из которых Петя одним ходом может перевести игру в позицию из задания 19 (где при любом ходе соперника следующий игрок выигрывает одним ходом), но не может выиграть сразу.

Проверка для S = 43. Петя ходит в 42 — это позиция, где при любом ходе Вани (в 21, 38, 41) Петя завершает игру следующим ходом.

SКто и когда выигрывает при правильной игре
40Петя выигрывает 1-м ходом
41Петя выигрывает 1-м ходом
42Ваня выигрывает 1-м ходом
43Петя выигрывает 2-м ходом
44Ваня выигрывает 1-м или 2-м ходом
45Петя выигрывает 3-м ходом
46Петя выигрывает 2-м ходом
47Ваня выигрывает 1-м или 2-м ходом
48Петя выигрывает 3-м ходом

Как работает программа. f(позиция, m) отвечает на вопрос: «выиграет ли нужный игрок не позднее, чем за m ходов (считая ходы обоих)». На нечётных шагах ходит тот, кто должен выиграть, — ему достаточно одного удачного хода (any); на чётных ходит соперник — выигрыш должен получаться при любом его ходе (all).

Ответ: 43 46

Решение на Python.

def f(s, m):
    if s <= 20:
        return m % 2 == 0
    if m == 0:
        return False
    h = [f(x, m - 1) for x in (s - 1, s - 4, s // 2)]
    return any(h) if m % 2 != 0 else all(h)

res = [s for s in range(21, 420) if f(s, 3) and not f(s, 1)]
print(res[0], res[1])

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

одна куча, растёт

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в кучу 1 камень;
– добавить в кучу 4 камня;
– увеличить количество камней в куче в 3 раза.
Например, из кучи в 10 камней за один ход можно получить кучу из 11, 14, 30 камней. Игра завершается, когда количество камней в куче становится не менее 103. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 103 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 102.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Вариант 12

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 1 камень;
– убрать из кучи 4 камня;
– уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 60 камней за один ход можно получить кучу из 59, 56, 20 камней. Игра завершается, когда количество камней в куче становится не более 40. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 40 или менее камней. В начальный момент в куче было S камней, S ≥ 41.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Вариант 13

две кучи

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в одну из куч 1 камень;
– увеличить количество камней в одной из куч в 2 раза.
Например, пусть в одной куче 10 камней, а в другой — 7; такую позицию обозначим (10, 7). За один ход из неё можно получить любую из позиций: (10, 8), (10, 14), (11, 7), (20, 7). Игра завершается, когда суммарное количество камней в кучах становится не менее 97. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 10 камней, во второй — S камней, 1 ≤ S ≤ 86.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Вариант 14

одна куча, растёт

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в кучу 1 камень;
– добавить в кучу 2 камня;
– увеличить количество камней в куче в 2 раза.
Например, из кучи в 10 камней за один ход можно получить кучу из 11, 12, 20 камней. Игра завершается, когда количество камней в куче становится не менее 103. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 103 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 102.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Вариант 15

одна куча, убывает

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– убрать из кучи 2 камня;
– убрать из кучи 6 камней;
– уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 60 камней за один ход можно получить кучу из 58, 54, 20 камней. Игра завершается, когда количество камней в куче становится не более 40. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 40 или менее камней. В начальный момент в куче было S камней, S ≥ 41.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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