Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
За один ход игрок может:
- убрать из одной из куч (по своему выбору) 3 камня;
- уменьшить количество камней в одной из куч (по своему выбору) в 3 раза (количество камней, полученное при делении, округляется до меньшего).
Например, пусть в одной куче 20 камней, в другой 30 камней; такую позицию в игре обозначим (20, 30). Тогда за один ход можно получить любую из четырёх позиций: (17, 30), (20, 27), (6, 30), (20, 10).
Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не более 53. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно 53 камня или меньше.
В начальный момент в первой куче было 19 камней, во второй куче S камней; S ≥ 35.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Резервная волна ЕГЭ по информатике 22.06.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 <= 53: return m%2 == 0 if m == 0: return 0 h = [f(s1-3,s2, m-1),f(s1,s2-3, 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(35,1000) if f(19,s,2)]) |
19) [38, 39, 40, 41, 42, 43, 44, 45,…
Решение — 20-21
|
1 2 3 4 5 6 7 |
def f(s1, s2,m): if s1+s2 <= 53: return m%2 == 0 if m == 0: return 0 h = [f(s1-3,s2, m-1),f(s1,s2-3, 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(35,1000) if not f(19,s,1) and f(19,s,3)]) print('21)', [s for s in range(35,1000) if not f(19,s,2) and f(19,s,4)]) |
20) [108, 109, 110, 114, 115, 116, 144, 145, 146, 315, 316, 317, 318, 319, 320, 321, 322, 323]
21) [111, 112, 113, 117, 118, 119, 147, 148, 149]