Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
− убрать из кучи два камня,
− уменьшить количество камней в куче в два раза (количество камней, полученное при делении, округляется до меньшего).
Игра завершается в тот момент, когда количество камней в куче становится не более 87.
Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче 87 камней или меньше.
В начальный момент в куче было S камней; S > 88.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Досрочный вариант ЕГЭ 2025 по информатике – задание №19-21
19. Укажите минимальное значение S, когда Петя не может выиграть за один ход, но при этом Ваня может выиграть своим первым ходом при любой игре Пети.
Ответ:
20. Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Ответ:
21. Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений S, в ответе запишите наименьшее из них.
Ответ:
Решение на Python
Решение —
|
1 2 3 4 5 6 7 8 |
def f(s, m): if s <= 87: return m % 2 == 0 if m == 0: return 0 h = [f(s - 2, m - 1), f(s // 2, m - 1)] return any(h) if (m - 1) % 2 == 0 else all(h) print('19.', [s for s in range(89, 1000) if f(s, 2)]) print('20.', [s for s in range(89, 1000) if not f(s, 1) and f(s, 3)]) print('21.', [s for s in range(89, 1000) if not f(s, 2) and f(s, 4)]) |
19) 176
20) 178; 179
21) 180
