Задача #4367

Задания 19–21

Уровень ЕГЭ

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

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

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

Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

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

Ответ

11
12

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

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))

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

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