Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
— убрать из кучи два камня,
— уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 165.
Победителем считается игрок, сделавший последний ход, т. е. первым получивший суммарно в кучах 165 камней или меньше.
В начальный момент в первой куче было 17 камней, во второй куче — S камней; S > 149.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите максимальное значение S, при котором Ваня может выиграть за один ход при неудачном ходе Пети.
Приведём решение на языке Python.
def f(x, y, h):
if h == 3 and x + y <= 165:
return 1
elif h == 3 and x + y > 165:
return 0
elif x + y <= 165 and h < 3:
return 0
else:
if h % 2 == 0:
return f(x - 2, y, h + 1) or f(x, y - 2, h + 1) or f(x // 3, y, h + 1) or f(x, y // 3, h + 1) # стратегия победителя
else:
return f(x - 2, y, h + 1) or f(x, y - 2, h + 1) or f(x // 3, y, h + 1) or f(x, y // 3, h + 1) # стратегия проигравшего(неудачный ход)
for x in range(10000, 10, -1):
if f(x, 17, 1) == 1:
print("Задача 19:", x)
break
Ответ: 1340.

