Та же игра, что в задании 19. Нужно найти значения S, при которых Петя гарантированно выигрывает своим вторым ходом, но не может выиграть первым.
Что ищем
Петя не выигрывает первым ходом.
Есть ход Пети в позицию, где Ваня проигрывает при любом своём ходе: после него Петя выигрывает.
Как решать
Взять позиции из задания 19 (Ваня выигрывает первым ходом при любом ходе Пети).
Найти S, из которых Петя может одним ходом попасть в такую позицию.
Проверить программой: 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, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия: – Петя не может выиграть за один ход; – Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Найденные значения запишите в ответе в порядке возрастания.