Для игры, описанной в предыдущем задании, найдите максимальное и минимальное значения , при которых у Пети есть выигрышная стратегия, причём Петя не может выиграть за один ход и Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. В ответе запишите числа в порядке возрастания без пробелов и знаков препинаний.
Решение 1
Возможные значения . В каждом из этих случаев Петя не может выиграть первым ходом. При
Петя может получить позицию
, при
— позицию
.
В первом случае после хода Вани возникнет одна из позиций ,
,
,
, во втором случае — одна из позиций
,
,
,
. В любой из перечисленных позиций Петя может выиграть, уменьшив вдвое количество камней в большей куче.
Решение 2
from functools import lru_cache
def moves(h):
a, b = h
m = []
if a > 1:
m += [((a + 1)//2, b), (a - 1, b)]
if b > 1:
m += [(a, (b + 1)//2), (a, b - 1)]
return m
@lru_cache(None)
def f(h):
if sum(h) <= 40:
return ’END’
if any(f(x) == ’END’ for x in moves(h)):
return ’P1’
if all(f(x) == ’P1’ for x in moves(h)):
return ’V1’
if any(f(x) == ’V1’ for x in moves(h)):
return ’P2’
for i in range(19, 100):
h = i, 20
if f(h) == ’P2’:
print(i)