Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, добавить два камня или увеличить количество камней в куче в два раза. При этом нельзя повторять ход, который только что сделал второй игрок.
Например, если в начале игры в куче
Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Существует несколько таких
В ответе запишите сначала наименьшее, затем наибольшее значение.
Рассмотрим наименьшее значение S = 12. Своим первым ходом Петя может получить
Наибольшее значение S — 23. Своим первым ходом Петя добавляет в кучу один камень и получает
Таким образом, ответ — 1223.
Ответ: 1223.
Приведем решение Юрия Красильникова на языке Python.
def move(n,lim,s,t):
player = 2-n%2
rival = 3-player
if s >= 50: return rival
if n > lim: return 0
pos = [(s+1,0),(s+2,1),(s*2,2)]
if len(t) > 0: del pos[t[-1]]
res = [move(n+1,lim,x[0],t+[x[1]]) for x in pos]
if any([x==player for x in res]): return player
if all([x==rival for x in res]): return rival
return 0
print('#19:',*[s for s in range(1,50) if move(1,2,s,[])==2])
print('#20:',*[s for s in range(1,50) if move(1,1,s,[])==0 and move(1,3,s,[])==1])
print('#21:',*[s for s in range(1,50) if move(1,2,s,[])==0 and move(1,4,s,[])==2])

