Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
– добавить в одну из куч (по своему выбору) 4 камня;
– увеличить количество камней в одной из куч (по своему выбору) в 3 раза.
Например, пусть в одной куче 20 камней, а в другой 30 камней; такую позицию в игре обозначим (20, 30). Тогда за один ход можно получить любую из четырёх позиций: (24, 30), (20, 34), (60, 30), (20, 90).
Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее 154. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно 154 камня или больше. В начальный момент в первой куче 11 камней, во второй куче – S камней; 1 ≤ S ≤ 142.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
ФИПИ Открытый вариант ЕГЭ 2026 по информатике – задание №19-21
19. Известно, что Ваня выиграл своим первым ходом после неудачного хода Пети. Укажите минимальное значение S, при котором такая ситуация возможна.
Ответ:
20. Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
– Петя не может выиграть за один ход;
– Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Ответ:
21. Для игры, описанной в задании 19, найдите наименьшее значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Ответ:
Решение на Python
Решение —
19.
|
1 2 3 4 5 6 |
def f(s1,s2,m): if s1+s2 >= 154: return m%2==0 if m == 0: return 0 h = [f(s1+4,s2,m-1),f(s1,s2+4,m-1),f(s1*3,s2,m-1),f(s1,s2*3,m-1)] return any(h) if (m-1)%2==0 else any(h) print('19)',[s for s in range(1,143) if f(11,s,2)]) |
19) [16, 17, 18, 19, 20, 21, 22, 23, 24, 25
20-21.
|
1 2 3 4 5 6 7 |
def f(s1,s2,m): if s1+s2 >= 154: return m%2==0 if m == 0: return 0 h = [f(s1+4,s2,m-1),f(s1,s2+4,m-1),f(s1*3,s2,m-1),f(s1,s2*3,m-1)] return any(h) if (m-1)%2==0 else all(h) print('20)',[s for s in range(1,143) if not f(11,s,1) and f(11,s,3)]) print('21)',[s for s in range(1,143) if not f(11,s,2) and f(11,s,4)]) |
20) [39, 40, 43, 45, 46]
21) [41, 42, 44]
