Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в большую кучу любое количество камней от одного до количества камней в этой куче. Изменять количество камней в меньшей куче не разрешается. Если кучи содержат равное количество камней, добавлять камни можно в любую из них. Игра завершается, когда общее количество камней в кучах становится более 60. Победителем считается игрок, сделавший последний ход, то есть первым получивший 61 или больше камней в двух кучах. Известно, что Петя смог выиграть первым ходом.
Какое наименьшее число камней могло быть суммарно в двух кучах?
Возьмём минимально возможную сумму: . Пусть в одной куче был
камень, тогда, во второй куче камней было от
до
. Так как нам необходимо минимальное количество камней, то берем число
. Общая сумма:
.
Программная реализация:
from functools import lru_cache
@lru_cache(None)
def f(a,b,c = 0):
if a+b >= 61:
return 0
if c > 2:
return 10000
if a > b: t = [f(a+i,b,c+1) for i in range(1, a+1)]
else: t = [f(a,b+i,c+1) for i in range(1, b+1)]
n = [i for i in t if i <= 0]
if n:
return -max(n) + 1
return -max(t)
ans = []
for i in range(1,61):
for j in range(1,61):
if f(i,j) == 1:
ans += [i+j]
print(min(ans))