Задача #4366

Задания 19–21

Уровень ЕГЭ

Общее условие для 19–21

(А. Шуруха) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
— переложить 3 камня из первой кучи во вторую (общее количество камней при этом не меняется);
— добавить в первую кучу 2 камня.
Например, пусть в первой куче 40 камней, а во второй 10 камней; такую позицию в игре обозначим (40, 10). Тогда за один ход можно получить любую из двух позиций: (37, 13), (42, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда произведение количеств камней в двух кучах становится не менее 600. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, при которой произведение количеств камней в кучах равно 600 или больше. В начальный момент в первой куче было 40 камней, во второй куче — S камней; 1 ≤ S ≤ 14. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Вопрос для задания 19

Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

Ответ
Новая
Войдите, чтобы история ответов и статистика сохранялись.
Решение Нажми, чтобы открыть Нажми, чтобы скрыть

Ответ

13

Общий разбор связки

def moves(a, b):
return [(a - 3, b + 3), (a + 2, b)]
def f(a, b, m):
if a * b >= 600: return m % 2 == 0
if m == 0: return False
h = [f(x, y, m - 1) for x, y in moves(a, b)]
return any(h) if m % 2 else all(h)

a19 = [s for s in range(1, 15) if f(40, s, 2)]
a20 = [s for s in range(1, 15) if f(40, s, 3) and not f(40, s, 1)]
a21 = [s for s in range(1, 15) if f(40, s, 4) and not f(40, s, 2)]
print('19', min(a19))
print('20', *a20[:2])
print('21', min(a21))

Решение для задания 19

Быстрый переход
Перейти к задаче