19). Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч (по своему выбору) 3 камня или уменьшить количество камней в куче в три раза(округляется в меньшую сторону).
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 53. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, при которой в кучах будет 53 или больше камней.
В начальный момент в первой куче было семь камней, во второй куче — S камней; S > 35.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
20). Для игры, описанной в задании 19, найдите наименьшее и наибольшее значение S, при которых у Пети выигрышная стратегия, причем одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
21). Для игры, описанной в задании 19, найдите наименьшее значение S, при котором одновременно выполняются два условия:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Посмотреть решение
def f (x,y,m):
if x+y<=53:
return m%2==0
if m==0:
return 0
h=[f(x-3,y,m-1),f(x//3,y,m-1),f(x,y-3,m-1),f(x,y//3,m-1)]
return any(h) if (m-1)%2==0 else all(h)
print([ y for y in range (35,500) if f(19,y,2)])
print([ y for y in range (35,500) if not f(19,y,1) and f(19,y,3)])
print([ y for y in range (35,500) if not f(19,y,2) and f(19,y,4)])
Ответ:
19) 38
20) 108 323
21) 111