Задания 25 ЕГЭ по информатике из разных источников

Задания 19-21. Информатика. ЕГЭ 2026. Статград. 16.12.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу \(2\) или \(3\) камня либо увеличить количество камней в куче в \(3\) раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(414.\)

Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из \(414\) или более камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 413.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите сумму таких значений \(S,\) при которых одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 2, h + 3, 3 * h

def game_over(h):
    return h > 413

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
            and any(win2(m) for m in moves(h))

z19 = [S for S in range(1, 414) if loose1(S)]
z20 = [S for S in range(1, 414) if win2(S)]
z21 = [S for S in range(1, 414) if loose2(S)]

print(sum(z19))
print(min(z20), max(z20))
print(sum(z21))

Ответ:
\(273\)
\(133 \,\, 135\)
\(263\)

Задания 19-21. Информатика. ЕГЭ 2026. ЕГКР. 13.12.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

добавить в кучу \(2\) камня;
добавить в кучу \(4\) камня;
увеличить количество камней в куче в \(2\) раза.
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(22,\) \(24\) или \(40\) камней.

Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее \(125.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(125\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 124.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 2, h + 4, h * 2

def game_over(h):
    return h > 124

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))

z19 = [S for S in range(1, 125) if lose1(S)]
z20 = [S for S in range(1, 125) if win2(S)]
z21 = [S for S in range(1, 125) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(61\)
\(31 \,\, 57\)
\(55\)

Задания 19-21. Информатика. ЕГЭ 2026. Демо

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(5\) камней;
уменьшить количество камней в куче в \(4\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(17,\) \(15\) или \(5\) камней.

Игра завершается, когда количество камней в куче становится не более \(30.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(30\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 31.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 5, h // 4

def game_over(h):
    return h < 31

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))

z19 = [S for S in range(31, 1000) if lose1(S)]
z20 = [S for S in range(31, 1000) if win2(S)]
z21 = [S for S in range(31, 1000) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(124\)
\(127 \,\, 128\)
\(132\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 20

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, или увеличить количество камней в куче в два раза. Например, имея кучу из \(15\) камней, за один ход можно получить кучу из \(16\) или \(30\) камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(2022.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(2022\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 2020.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h * 2

def game_over(h):
    return h > 2021

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 2021) if loose1(S)]
z20 = [S for S in range(1, 2021) if win2(S)]
z21 = [S for S in range(1, 2021) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(1010\)
\(505 \,\, 1009\)
\(1008\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 19

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, или увеличить количество камней в куче в два раза. Например, имея кучу из \(15\) камней, за один ход можно получить кучу из \(16\) или \(30\) камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(201.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(201\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 200.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h * 2

def game_over(h):
    return h > 200

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 201) if loose1(S)]
z20 = [S for S in range(1, 201) if win2(S)]
z21 = [S for S in range(1, 201) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(100\)
\(50 \,\, 99\)
\(98\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 18

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, или увеличить количество камней в куче в два раза. Например, имея кучу из \(19\) камней, за один ход можно получить кучу из \(20\) или \(38\) камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(177.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(177\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 176.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h * 2

def game_over(h):
    return h > 176

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 177) if loose1(S)]
z20 = [S for S in range(1, 177) if win2(S)]
z21 = [S for S in range(1, 177) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(88\)
\(44 \,\, 87\)
\(86\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 17

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень, или увеличить количество камней в куче в два раза. Например, пусть в одной куче \(10\) камней, а в другой \(7\) камней; такую позицию мы будем обозначать \((10, \, 7).\) Тогда за один ход можно получить любую из четырёх позиций: \((10, \, 7),\) \((20, \, 7),\) \((10, \, 8),\) \((10, \, 14).\) Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда суммарное количество камней в кучах становится не менее \(145.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, что в кучах всего будет \(145\) или больше камней.

В начальный момент в первой куче было семь камней, во второй куче — \(S\) камней, \(1 \leqslant S \leqslant 137.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    h1, h2 = h
    return (h1 + 1, h2), (2 * h1, h2), (h1, h2 + 1), (h1, 2 * h2)

def game_over(h):
    return sum(h) > 144

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1_bad(h):
    return not win1(h) and any(win1(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 138) if loose1_bad((7, S))]
z20 = [S for S in range(1, 138) if win2((7, S))]
z21 = [S for S in range(1, 138) if loose2((7, S))]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(35\)
\(65 \,\, 68\)
\(64\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 16

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень, или увеличить количество камней в куче в два раза. Например, пусть в одной куче \(10\) камней, а в другой \(7\) камней; такую позицию мы будем обозначать \((10, \, 7).\) Тогда за один ход можно получить любую из четырёх позиций: \((10, \, 7),\) \((20, \, 7),\) \((10, \, 8),\) \((10, \, 14).\) Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда суммарное количество камней в кучах становится не менее \(123.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, что в кучах всего будет \(123\) или больше камней.

В начальный момент в первой куче было девять камней, во второй куче — \(S\) камней, \(1 \leqslant S \leqslant 113.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    h1, h2 = h
    return (h1 + 1, h2), (2 * h1, h2), (h1, h2 + 1), (h1, 2 * h2)

def game_over(h):
    return sum(h) > 122

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1_bad(h):
    return not win1(h) and any(win1(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 114) if loose1_bad((9, S))]
z20 = [S for S in range(1, 114) if win2((9, S))]
z21 = [S for S in range(1, 114) if loose2((9, S))]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(29\)
\(52 \,\, 56\)
\(51\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 15

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень, или увеличить количество камней в куче в два раза. Например, пусть в одной куче \(10\) камней, а в другой \(7\) камней; такую позицию мы будем обозначать \((10, \, 7).\) Тогда за один ход можно получить любую из четырёх позиций: \((10, \, 7),\) \((20, \, 7),\) \((10, \, 8),\) \((10, \, 14).\) Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда суммарное количество камней в кучах становится не менее \(101.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, что в кучах всего будет \(101\) или больше камней.

В начальный момент в первой куче было семь камней, во второй куче — \(S\) камней, \(1 \leqslant S \leqslant 93.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    h1, h2 = h
    return (h1 + 1, h2), (2 * h1, h2), (h1, h2 + 1), (h1, 2 * h2)

def game_over(h):
    return sum(h) > 100

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1_bad(h):
    return not win1(h) and any(win1(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 94) if loose1_bad((7, S))]
z20 = [S for S in range(1, 94) if win2((7, S))]
z21 = [S for S in range(1, 94) if loose2((7, S))]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(24\)
\(43 \,\, 46\)
\(42\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 14

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(301.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(301\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 300.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h * 2

def game_over(h):
    return h > 300

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 301) if loose1(S)]
z20 = [S for S in range(1, 301) if win2(S)]
z21 = [S for S in range(1, 301) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(150\)
\(75 \,\, 149\)
\(148\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 13

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(229.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(229\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 228.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h * 2

def game_over(h):
    return h > 228

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 229) if loose1(S)]
z20 = [S for S in range(1, 229) if win2(S)]
z21 = [S for S in range(1, 229) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(114\)
\(57 \,\, 113\)
\(112\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 12

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или пять камней, или увеличить количество камней в куче в четыре раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(105.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(105\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 104.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h + 5, h * 4

def game_over(h):
    return h > 104

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 105) if loose1(S)]
z20 = [S for S in range(1, 105) if win2(S)]
z21 = [S for S in range(1, 105) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(26\)
\(21 \,\, 25\)
\(20\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 11

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или пять камней, или увеличить количество камней в куче в четыре раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(205.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(205\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 204.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h + 5, h * 4

def game_over(h):
    return h > 204

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 205) if loose1(S)]
z20 = [S for S in range(1, 205) if win2(S)]
z21 = [S for S in range(1, 205) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(51\)
\(46 \,\, 50\)
\(45\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 10

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня, или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(223.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(223\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 222.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h + 4, h * 3

def game_over(h):
    return h > 222

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 222) if loose1(S)]
z20 = [S for S in range(1, 222) if win2(S)]
z21 = [S for S in range(1, 222) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(74\)
\(70 \,\, 73\)
\(69\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 9

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня, или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается, когда количество камней в куче становится не менее \(202.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, состоящую из \(202\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 201.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 1, h + 4, h * 3

def game_over(h):
    return h > 201

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(1, 202) if loose1(S)]
z20 = [S for S in range(1, 202) if win2(S)]
z21 = [S for S in range(1, 202) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(67\)
\(63 \,\, 66\)
\(62\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 8

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи три камня, или убрать из кучи семь камней, или уменьшить количество камней в куче в четыре раза (количество камней, полученное при делении, округляется до меньшего).

Например, из кучи в \(21\) камень за один ход можно получить кучу из \(18,\) \(14\) или \(5\) камней.

Игра завершается, когда количество камней в куче становится не более \(34.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(34\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 35.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 7, h // 4

def game_over(h):
    return h < 35

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(35, 1000) if loose1(S)]
z20 = [S for S in range(35, 1000) if win2(S)]
z21 = [S for S in range(35, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(140\)
\(143 \,\, 144\)
\(146\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 7

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи три камня, или убрать из кучи семь камней, или уменьшить количество камней в куче в четыре раза (количество камней, полученное при делении, округляется до меньшего).

Например, из кучи в \(21\) камень за один ход можно получить кучу из \(18,\) \(14\) или \(5\) камней.

Игра завершается, когда количество камней в куче становится не более \(21.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(21\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 22.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 7, h // 4

def game_over(h):
    return h < 22

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(22, 1000) if loose1(S)]
z20 = [S for S in range(22, 1000) if win2(S)]
z21 = [S for S in range(22, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(88\)
\(91 \,\, 92\)
\(94\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 6

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи два камня, или убрать из кучи пять камней, или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).

Например, из кучи в \(20\) камней за один ход можно получить кучу из \(18,\) \(15\) или \(6\) камней.

Игра завершается, когда количество камней в куче становится не более \(49.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(49\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 50.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 2, h - 5, h // 3

#print(moves(20))

def game_over(h):
    return h < 50

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(50, 1000) if loose1(S)]
z20 = [S for S in range(50, 1000) if win2(S)]
z21 = [S for S in range(50, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(150\)
\(152 \,\, 153\)
\(154\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 5

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи два камня, или убрать из кучи пять камней, или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).

Например, из кучи в \(20\) камней за один ход можно получить кучу из \(18,\) \(15\) или \(6\) камней.

Игра завершается, когда количество камней в куче становится не более \(31.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(31\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 32.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 2, h - 5, h // 3

#print(moves(20))

def game_over(h):
    return h < 32

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(32, 1000) if loose1(S)]
z20 = [S for S in range(32, 1000) if win2(S)]
z21 = [S for S in range(32, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(96\)
\(98 \,\, 99\)
\(100\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 4

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(5\) камней;
уменьшить количество камней в куче в \(4\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(40\) камней за один ход можно получить кучу из \(37,\) \(35\) или \(10\) камней.

Игра завершается, когда количество камней в куче становится не более \(76.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(76\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 77.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 5, h // 4

#print(moves(40))

def game_over(h):
    return h < 77

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(76, 1000) if loose1(S)]
z20 = [S for S in range(76, 1000) if win2(S)]
z21 = [S for S in range(76, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(308\)
\(311 \,\, 312\)
\(316\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 3

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(5\) камней;
уменьшить количество камней в куче в \(4\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(40\) камней за один ход можно получить кучу из \(37,\) \(35\) или \(10\) камней.

Игра завершается, когда количество камней в куче становится не более \(71.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(71\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 72.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 5, h // 4

#print(moves(40))

def game_over(h):
    return h < 72

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(72, 1000) if loose1(S)]
z20 = [S for S in range(72, 1000) if win2(S)]
z21 = [S for S in range(72, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(288\)
\(291 \,\, 292\)
\(296\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 2

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(5\) камней;
уменьшить количество камней в куче в \(4\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(40\) камней за один ход можно получить кучу из \(37,\) \(35\) или \(10\) камней.

Игра завершается, когда количество камней в куче становится не более \(65.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(65\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 66.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 5, h // 4

#print(moves(40))

def game_over(h):
    return h < 66

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(66, 1000) if loose1(S)]
z20 = [S for S in range(66, 1000) if win2(S)]
z21 = [S for S in range(66, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(264\)
\(267 \,\, 268\)
\(272\)

Задания 19-21. Информатика. ЕГЭ 2026. Крылов. Вариант 1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(5\) камней;
уменьшить количество камней в куче в \(4\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(40\) камней за один ход можно получить кучу из \(37,\) \(35\) или \(10\) камней.

Игра завершается, когда количество камней в куче становится не более \(60.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(60\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 61.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h - 5, h // 4

#print(moves(40))

def game_over(h):
    return h < 61

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def loose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return not win1(h) and any(loose1(m) for m in moves(h))

def loose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
           and not all(win1(m) for m in moves(h))


z19 = [S for S in range(61, 1000) if loose1(S)]
z20 = [S for S in range(61, 1000) if win2(S)]
z21 = [S for S in range(61, 1000) if loose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(244\)
\(247 \,\, 248\)
\(252\)

Задания 19-21. Информатика. ЕГЭ 2026. Статград. 23.10.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня,
уменьшить количество камней в куче в \(5\) раз (количество камней, полученное при делении, округляется до меньшего).
Игра завершается в тот момент, когда количество камней в куче становится не более \(505.\)

Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче \(505\) камней или меньше.

В начальный момент в куче было \(S\) камней; \(S > 505.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Укажите максимальное значение \(S,\) при котором Ваня может выиграть за один ход при неудачном ходе Пети

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 3, h // 5

def game_over(h):
    return h < 506

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def lose1_bad(heap):
    return any(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap))  and any(win2(m) for m in moves(heap))


z19 = [S for S in range(506, 50000) if lose1_bad(S)]
z20 = [S for S in range(506, 5000) if win2(S)]
z21 = [S for S in range(506, 5000) if lose2(S)]

print(max(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(12649\)
\(2533 \,\, 2534\)
\(2536\)

Задания 19-21. Информатика. ЕГЭ. Основная волна. Пересдача. 03.07.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(8\) камней;
уменьшить количество камней в куче в \(3\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(17,\) \(12\) или \(6\) камней.

Игра завершается, когда количество камней в куче становится не более \(15.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(15\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 16.\)

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return  h - 3, h - 8, h // 3

def game_over(h):
    return h < 16

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))


z19 = [S for S in range(13, 1000) if lose1(S)]
z20 = [S for S in range(13, 1000) if win2(S)]
z21 = [S for S in range(13, 1000) if lose2(S)]
print(z19[0])
print(z20[0], z20[1])
print(z21[0])

Ответ:
\(48\)
\(51 \,\, 52\)
\(54\)

Задания 19-21. Информатика. ЕГЭ. Основная волна. Резерв. 23.06.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(1\) камень;
убрать из кучи \(6\) камней;
уменьшить количество камней в куче в \(5\) раз (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(19,\) \(14\) или \(4\) камня.

Игра завершается, когда количество камней в куче становится не более \(12.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(12\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 13.\)

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return  h - 1, h - 6, h // 5

def game_over(h):
    return h < 13

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))


z19 = [S for S in range(13, 1000) if lose1(S)]
z20 = [S for S in range(13, 1000) if win2(S)]
z21 = [S for S in range(13, 1000) if lose2(S)]
print(*z19)
print(z20[0], z20[1])
print(z21[0])

Ответ:
\(65\)
\(66 \,\, 71\)
\(67\)

Задания 19-21. Информатика. ЕГЭ. Основная волна. Резерв. 19.06.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(6\) камней;
уменьшить количество камней в куче в \(3\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(17,\) \(14\) или \(6\) камней.

Игра завершается, когда количество камней в куче становится не более \(27.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(27\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant28.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(heap):
    return heap - 3, heap - 6, heap // 3

def game_over(pos):
    return pos <= 27

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(28, 200) if lose1(S)]
z20 = [S for S in range(28, 200) if win2(S)]
z21 = [S for S in range(28, 200) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(84\)
\(87 \,\, 88\)
\(93\)

Задания 19-21. Информатика. ЕГЭ. Основная волна. 11.06.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи \(3\) камня;
убрать из кучи \(8\) камня;
уменьшить количество камней в куче в \(3\) раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в \(20\) камней, за один ход можно получить кучу из \(17,\) \(12\) или \(8\) камней. Игра завершается в тот момент, когда количество камней в куче становится не более \(16.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в куче будет \(16\) или менее камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 17.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, пр котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

20

Для игры, описанной в предыдущем задании, найдите два наименьших значения \(S,\) при котором у Петя есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в порядке возрастания.

21

Для игры, описанной ранее, найдите такое минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(heap):
    return heap - 3, heap - 8, heap // 3

def game_over(pos):
    return pos <= 16

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(17, 200) if lose1(S)]
z20 = [S for S in range(17, 200) if win2(S)]
z21 = [S for S in range(17, 200) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(51\)
\(54 \,\, 55\)
\(57\)

Задания 19-21. Информатика. ЕГЭ. Основная волна. 10.06.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи один камень или убрать из кучи три камня. Например, имея кучу из \(30\) камней, за один ход можно получить кучу из \(29\) или \(27\) камней. Игра завершается в тот момент, когда количество камней в куче становится не более \(11.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в куче будет \(11\) или менее камней. В начальный момент в куче было \(S\) камней, \(S > 11.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т. е. не являющиеся выигрышными независимо от игры противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.

20

Для игры, описанной в предыдущем задании, найдите два таких значения \(S,\) при котором у Петя есть выигрышная стратегия, причём Петя не может выиграть за один ход и Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

В ответе запишите числа в порядке возрастания без пробелов и знаков препинания.

21

Для игры, описанной ранее, найдите такое максимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если такого значения нет, в ответ запишите 0.

Решение:

Python


def moves(heap):
    return heap -1, heap - 3

def game_over(pos):
    return pos <= 11

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad (pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(12, 1000) if lose1_bad(S)]
z20 = [S for S in range(12, 1000) if win2(S)]
z21 = [S for S in range(12, 1000) if lose2(S)]

print(max(z19))
print(*z20)
print(max(z21))

Ответ:
\(17\)
\(16 \,\, 18\)
\(19\)

Задания 19-21. Информатика. ЕГЭ. Апробация. 14.05.2025-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее \(52.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из \(52\) или более камней. В начальный момент в куче было \(S\) камней: \(1 \leqslant S \leqslant 51.\)

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

20

Для игры, описанной в задании 19, найдите два таких минимальных значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом
Если найдено несколько значений \(S,\) в ответе запишите наименьшее из них.

Решение:

Python


def moves(heap):
    return heap + 1, heap + 4, 3 * heap

def game_over(pos):
    return pos > 51

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 52) if lose1(S)]
z20 = [S for S in range(1, 52) if win2(S)]
z21 = [S for S in range(1, 52) if lose2(S)]

print(*z19)
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(17\)
\(13 \,\, 16\)
\(12\)

Задания 19-21. Информатика. ЕГЭ. ЕГКР. 19.04.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

добавить в кучу \(2\) камня;
добавить в кучу \(5\) камней;
увеличить количество камней в куче в \(2\) раза.
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(22,\) \(25\) или \(40\) камней.

Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее \(128.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(128\) или более камней. В начальной момент в куче было \(S\) камней, \(1< S < 127.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(heap):
    return heap + 2, heap + 5, 2 * heap

def game_over(heap):
    return heap >= 128

def win1(heap):
    return not game_over(heap) and any(game_over(h) for h in moves(heap))

def lose1(heap):
    return all(win1(h) for h in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(h) for h in moves(heap))

def lose2(heap):
    return all(win1(h) or win2(h) for h in moves(heap)) \
            and any(win2(h) for h in moves(heap))

z19 = [S for S in range(1, 128) if lose1(S)]
z20 = [S for S in range(1, 128) if win2(S)]
z21 = [S for S in range(1, 128) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(62\)
\(31 \,\, 57\)
\(55\)

Задания 19-21. Информатика. ЕГЭ. Досрочный экзамен. 08.04.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи два камня
уменьшить количество камней в куче в два раза (количество камней, полученное при делении, округляется до меньшего).
Игра завершается в тот момент, когда количество камней в куче становится не более \(87.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче \(87\) камней или меньше. В начальный момент в куче было \(S\) камней; \(S > 88.\) Будем говорить, что игрок имеет >em>выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение \(S,\) когда Петя не может выиграть за один ход, но при этом Ваня может выиграть своим первым ходом при любой игре Пети.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наименьшее из них.

Решение:

Python


def moves(heap):
    return heap - 2, heap // 2

def game_over(pos):
    return pos < 88

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(89, 1000) if lose1(S)]
z20 = [S for S in range(89, 1000) if win2(S)]
z21 = [S for S in range(89, 1000) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(176\)
\(178 \,\, 179\)
\(180\)

Задания 19-21. Информатика. ЕГЭ. Апробация. 05.03.2025-2

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее \(51.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, в которой находится 51 камень или больше. В начальный момент в куче было \(S\) камней; \(1\leqslant S \leqslant 50.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение \(S\) при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани не стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наименьшее из них.

Решение:

Python


def moves(h):
    return h + 1, h + 4, 2 * h

def game_over(pos):
    return pos > 50

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
        and any(win2(m) for m in moves(pos))


z19 = [S for S in range(1, 51) if lose1(S)]
z20 = [S for S in range(1, 51) if win2(S)]
z21 = [S for S in range(1, 51) if lose2(S)]

print(min(z19))
print(z20[0], z20[1])
print(z21[0])

Ответ:
\(25\)
\(21 \,\, 24\)
\(20\)

Задания 19-21. Информатика. ЕГЭ. Апробация. 05.03.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(81.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах находится \(81\) камень или больше.

В начальный момент в первой куче было семь камней, во второй куче — \(S\) камней; \(1 \leqslant S \leqslant 73.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    h1, h2 = h
    return (h1 + 1, h2), (2 * h1, h2), (h1, h2 + 1), (h1, 2 * h2)

def game_over(heaps):
    return sum(heaps) > 80

def win1(heaps):
    return not game_over(heaps) and any(game_over(h) for h in moves(heaps))

def lose1(heaps):
    return all(win1(h) for h in moves(heaps))

def lose1_bad(heaps):
    return any(win1(h) for h in moves(heaps))

def win2(heaps):
    return not win1(heaps) and any(lose1(h) for h in moves(heaps))

def lose2(heaps):
    return all(win1(h) or win2(h) for h in moves(heaps)) \
        and any(win2(h) for h in moves(heaps))

z19 = [S for S in range(1, 74) if lose1_bad([7, S])]
z20 = [S for S in range(1, 74) if win2([7, S])]
z21 = [S for S in range(1, 74) if lose2([7, S])]

print(min(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(19\)
\(33 \, 36\)
\(32\)

Задания 19-21. Информатика. ЕГЭ. Демо-2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи два камня или убрать из кучи пять камней или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из \(18,\) \(15\) или \(6\) камней. Игра завершается, когда количество камней в куче становится не более \(19.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(19\) или меньше камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 20.\)

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import floor

def moves(h):
    return h - 2, h - 5, floor(h / 3)

def gameOver(pos):
    return pos <= 19

def win1(pos):
    return not gameOver(pos) and any(gameOver(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(20, 1000) if lose1(S)]
z20 = [S for S in range(20, 1000) if win2(S)]
z21 = [S for S in range(20, 1000) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(60\)
\(62 \,\, 63\)
\(64\)

Другое решение


from math import floor

def moves(h):
    return h - 2, h - 5, floor(h / 3)

heap = [None] * 1000

for i in range(20, 1000):
    if any(s < 20  for s in moves(i)):
        heap[i] = 'P1'
print('Решение 19 задачи')
z19 = []
for i in range(20, 1000):
    if not heap[i] and all(heap[s] == 'P1' for s in moves(i)):
        heap[i] = 'V1'
        z19.append(i)
print(min(z19))
print('Решение 20 задачи')
z20 = []
for i in range(20, 1000):
    if not heap[i] and any(heap[s] == 'V1' for s in moves(i)):
        heap[i] = 'P2'
        z20.append(i)
print(z20[0], z20[1])
print('Решение 21 задачи')
z21 = []
for i in range(20, 1000):
    if not heap[i] and any(heap[s] == 'P1' or heap[s] == 'P2' for s in moves(i)):
        heap[i] = 'V2'
        z21.append(i)
print(min(z21))

Задания 19-21. Информатика. ЕГЭ. Шастин. 7.6.2025

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч два камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на \(1\) камень меньше, чем убирается). Например, пусть в одной куче \(6,\) а в другой \(9\) камней; такую позицию мы будем обозначать \((6, \, 9).\) За один ход из позиции \((6, \, 9)\) можно получить любую из трёх позиций: \((3, \, 9),\) \((6, \, 7),\) \((4, \, 9)\) и \((6, \, 4).\) Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более \(212.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет \(212\) или меньше камней. В начальный момент в первой куче было \(110\) камней, во второй куче — \(S\) камней, \(S > 102.\)

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

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите наибольшее значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(heaps):
    h1, h2 = heaps
    return (h1 - 2, h2), (h1, h2 - 2), (h1 // 2, h2), (h1, h2 // 2)

def game_over(heaps):
    return sum(heaps) <= 212

def win1(heaps):
    return not game_over(heaps) and any(game_over(m) for m in moves(heaps))

def lose1(heaps):
    return all(win1(m) for m in moves(heaps))

def lose1_bad(heaps):
    return any(win1(m) for m in moves(heaps))

def win2(heaps):
    return not win1(heaps) and any(lose1(m) for m in moves(heaps))

def lose2(heaps):
    return all(win1(m) or win2(m) for m in moves(heaps)) \
            and any(win2(m) for m in moves(heaps))


z19 = [S for S in range(102, 1000) if lose1_bad((110, S))]
z20 = [S for S in range(102, 1000) if win2((110, S))]
z21 = [S for S in range(102, 1000) if lose2((110, S))]

print(max(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(411\)
\(208 \,\, 415\)
\(319\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 5.6.2025

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) от \(1\) до \(5\) камней или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(610.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой суммарное количество камней в кучах будет больше либо равно \(610.\)

В начальный момент в первой куче было \(110\) камней, во второй куче — \(S\) камней; \(1 \leqslant S \leqslant 250.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в предыдущем задании, найдите два наибольших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом

Решение:

Python


def moves(heaps):
    h1, h2 = heaps
    return [(h1 + x, h2) for x in range(1, 6)] + [(h1, h2 + x) for x in range(1, 6)] \
            + [(2 * h1, h2), (h1, 2 * h2)]

def game_over(heaps):
    return sum(heaps) >= 610

def win1(heaps):
    return not game_over(heaps) and any(game_over(m) for m in moves(heaps))

def lose1(heaps):
    return all(win1(m) for m in moves(heaps))

def lose1_bad(heaps):
    return any(win1(m) for m in moves(heaps))

def win2(heaps):
    return not win1(heaps) and any(lose1(m) for m in moves(heaps))

def lose2(heaps):
    return all(win1(m) or win2(m) for m in moves(heaps)) \
           and any(win2(m) for m in moves(heaps))

z19 = [S for S in range(1, 251) if lose1_bad([110, S])]
z20 = [S for S in range(1, 251) if win2([110, S])]
z21 = [S for S in range(1, 251) if lose2([110, S])]
print(min(z19))
print(z20[-2], z20[-1])
print(z21[0])

Ответ:
\(125\)
\(248 \,\, 249\)
\(246\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 3.6.2025

19

(Л. Шастин). Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи три камня или убрать из кучи пять камней или уменьшить количество камней в куче в два раза (количество камней, полученное при делении, округляется до большего). Например, из кучи в \(21\) камней за один ход можно получить кучу из \(18,\) \(16\) или \(11\) камней. Игра завершается, когда количество камней в куче становится не более \(23.\)

Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(23\) или меньше камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 24.\)

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите максимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом

Решение:

Python


from math import ceil

def moves(h):
    return h - 3, h - 5, ceil(h / 2)

def game_over(heap):
    return heap <= 23

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return not win1(heap) and all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))

z19 = [S for S in range(24, 1000) if lose1(S)]
z20 = [S for S in range(24, 1000) if win2(S)]
z21 = [S for S in range(24, 1000) if lose2(S)]

print(max(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(49\)
\(50 \,\, 98\)
\(101\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 1.6.2025

19

(Л. Шастин). Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

добавить в кучу \(4\) камня;
добавить в кучу \(7\) камней;
увеличить количество камней в куче в \(4\) раза.
Например, из кучи в \(10\) камней за один ход можно получить кучу из \(14,\) \(17\) или \(40\) камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее \(471.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(471\) или более камней. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 470.\)

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

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите сумму значений \(S,\) при которых одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 4, h + 7, 4 * h

def game_over(heap):
    return heap >= 471

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return not win1(heap) and all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))

z19 = [S for S in range(1, 471) if lose1(S)]
z20 = [S for S in range(1, 471) if win2(S)]
z21 = [S for S in range(1, 471) if lose2(S)]

print(len(z19))
print(min(z20), max(z20))
print(sum(z21))

Ответ:
\(4\)
\(29 \,\, 113\)
\(418\)

Задания 19-21. Информатика. ЕГЭ. Статград. Профиль. 12.05.2025-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. Если количество камней в куче делится на целое \(k\) \((0 < k < 31),\) то игрок может убрать из кучи \(k\) камней. Например, если в куче \(36\) камней, то за один ход можно убрать \(1, \, 2, \, 3, \, 4, \, 6, \, 12\) или \(18\) камней. Игра завершается, когда количество камней в куче становится не более \(31.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(31\) или меньше камней.

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых Петя не может выиграть первым ходом, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Вани. В ответе запишите найденные значения в порядке возрастания.

21

Для игры, описанной в задании 19, найдите максимальное значение \(S,\) при котором у Вани есть стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволила бы ему гарантированно выиграть первым ходом.

Решение:

Python


def divisors(n):
    return [x for x in range(1, 31) if n % x == 0]

def moves(h):
    return [h - x for x in divisors(h)]

def game_over(h):
    return h <= 31

def win1(h):
    return not game_over(h) and any(game_over(m) for m in moves(h))

def lose1(h):
    return not win1(h) and all(win1(m) for m in moves(h))

def win2(h):
    return any(lose1(m) for m in moves(h))

def lose2(h):
    return all(win1(m) or win2(m) for m in moves(h)) \
            and any(win2(m) for m in moves(h))

z19 = [S for S in range(32, 200) if lose1(S)]
z20 = [S for S in range(32, 200) if win2(S)]
z21 = [S for S in range(32, 200) if lose2(S)]
print(max(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(61\)
\(38 \,\, 76\)
\(69\)

Задания 19-21. Информатика. ЕГЭ. Статград. База. 12.05.2025-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед ними находится куча камней. Игроки ходят по очереди, первым ходит Петя. За один ход игрок может либо добавить в кучу \(3\) или \(4\) камня, либо сделать количество камней в куче равным квадрату текущего количества камней. Например, если в куче \(5\) камней, то за один ход можно получить \(8,\) \(9\) или \(25\) камней. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее \(627.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(627\) камней или больше. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 200.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Найдите количество значений \(S,\) при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наибольшее из них.

Решение:

Python


def moves(heap):
    return heap + 3, heap + 4, heap ** 2

def game_over(heap):
    return heap >= 627

def win1(heap):
    return not game_over(heap) and any(game_over(m) for m in moves(heap))

def lose1(heap):
    return all(win1(m) for m in moves(heap))

def win2(heap):
    return not win1(heap) and any(lose1(m) for m in moves(heap))

def lose2(heap):
    return all(win1(m) or win2(m) for m in moves(heap)) \
            and any(win2(m) for m in moves(heap))

z19 = [S for S in range(1, 201) if lose1(S)]
z20 = [S for S in range(1, 201) if win2(S)]
z21 = [S for S in range(1, 201) if lose2(S)]

print(len(z19))
print(z20[0], z20[1])
print(max(z21))

Ответ:
\(3\)
\(5 \,\, 19\)
\(18\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 7.05.2025

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) три камня или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(100.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах находится \(100\) камень или больше.

В начальный момент в первой куче было \(17\) камней, во второй куче — \(S\) камней; \(1 \leqslant S \leqslant 82.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение \(S,\) когда Петя не может выиграть за один ход, но при этом Ваня может выиграть своим первым ходом при любой игре Пети.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наибольшее из них.

Решение:

Python


def moves(heaps):
    h1, h2 = heaps
    return (h1 + 3, h2), (h1, h2 + 3) , (2 * h1, h2), (h1, 2 * h2)

def game_over(heaps):
    return sum(heaps) >= 100

def win1(heaps):
    return not game_over(heaps) and any(game_over(m) for m in moves(heaps))

def lose1(heaps):
    return not win1(heaps) and all(win1(m) for m in moves(heaps))

def win2(heaps):
    return not win1(heaps) and any(lose1(m) for m in moves(heaps))

def lose2(heaps):
    return all(win1(m) or win2(m) for m in moves(heaps)) and\
            any(win2(m) for m in moves(heaps))

z19 = [S for S in range(1, 83) if lose1([17, S])]
z20 = [S for S in range(1, 83) if win2([17, S])]
z21 = [S for S in range(1, 83) if lose2([17, S])]

print(min(z19))
print(z20[0], z20[1])
print(max(z21))

Ответ:
\(40\)
\(20 \,\, 29\)
\(36\)

Задания 19-21. Информатика. ЕГЭ. ЕГКР. 21.12.2024

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

добавить в кучу \(3\) камня;
добавить в кучу \(6\) камней;
увеличить количество камней в куче в \(3\) раза.
Например, из кучи в \(20\) камней за один ход можно получить кучу из \(23,\) \(26\) или \(60\) камней.

Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее \(132.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из \(132\) или более камней. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 131.\)

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 3, h + 6, 3 * h

def game_over(pos):
    return pos >= 132

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 132) if lose1(S)]
z20 = [S for S in range(1, 132) if win2(S)]
z21 = [S for S in range(1, 132) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(41\)
\(14 \,\, 35\)
\(32\)

Задания 19-21. Информатика. ЕГЭ. Статград. 01.04.2025-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

убрать из кучи два камня,
уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более \(150.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший суммарно в кучах \(150\) камней или меньше.

В начальный момент в первой куче было \(17\) камней, во второй куче — \(S\) камней; \(S > 134.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение \(S,\) при котором Ваня может выиграть за один ход при неудачном ходе Пети.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import floor

def moves(heaps):
    h1, h2 = heaps
    return (h1 - 2, h2), (h1, h2 - 2), (floor(h1 / 3), h2), (h1, floor(h2 / 3))

def game_over(pos):
    return sum(pos) <= 150

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win1(m) for m in moves(pos))

z19 = [S for S in range(135, 10000) if lose1_bad([17, S])]
z20 = [S for S in range(135, 10000) if win2([17, S])]
z21 = [S for S in range(135, 10000) if lose2([17, S])]

print(max(z19))
print(z20[0], z20[1])
print(min(z21))

Ответ:
\(1205\)
\(404 \,\, 405\)
\(402\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 13.03.2025

19

(Д. Бахтиев) Два игрока, Полина и Вероника, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Полина. За один ход игрок может уменьшить количество камней в одной из куч в два раза (если количество камней в куче нечётно, остаётся на \(1\) камень меньше, чем убирается) или убрать из одной из куч пять камней, при этом два камня перекладываются в соседнюю кучу, а оставшиеся три выбрасываются в океан несбывшихся надежд. Например, пусть в одной куче \(10,\) а в другой \(15\) камней; такую позицию мы будем обозначать \((10, 15).\) За один ход из позиции \((10, 15)\) можно получить любую из четырёх позиций: \((5, 17),\) \((12, 10),\) \((10, 7)\) и \((5, 15).\) Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более \(69.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет \(69\) или меньше камней. В начальный момент в первой куче было \(35\) камней, во второй куче — \(S\) камней, \(S > 50.\) Укажите максимальное значение \(S,\) при котором Полина не может выиграть за один ход, но при любом ходе Полины Вероника может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при котором у Полины есть выигрышная стратегия, причём одновременно выполняются два условия:

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

21

Для игры, описанной в задании 19, найдите наименьшее значение \(S,\) при котором одновременно выполняются два условия:

у Вероники есть выигрышная стратегия, позволяющая ей выиграть первым или вторым ходом при любой игре Полины;
у Вероники нет стратегии, которая позволит ей гарантированно выиграть первым ходом.

Решение:

Python


from math import floor

def moves(h):
    h1, h2 = h
    return (floor(h1 / 2), h2), (h1, floor(h2 / 2)), (h1 - 5, h2 + 2), (h1 + 2, h2 - 5)

def game_over(heaps):
    return sum(heaps) <= 69

def win1(heaps):
    return not game_over(heaps) and any(game_over(m) for m in moves(heaps))

def lose1(heaps):
    return all(win1(m) for m in moves(heaps))

def win2(heaps):
    return not win1(heaps) and any(lose1(m) for m in moves(heaps))

def lose2(heaps):
    return all(win1(m) or win2(m) for m in moves(heaps)) \
        and any(win2(m) for m in moves(heaps))

z19 = [S for S in range(51, 1000) if lose1((35, S))]
z20 = [S for S in range(51, 1000) if win2((35, S))]
z21 = [S for S in range(51, 1000) if lose2((35, S))]
print(max(z19))
print(min(z20), max(z20))
print(min(z21))

Ответ:
\(70\)
\(71 \,\, 141\)
\(72\)

Задания 19-21. Информатика. ЕГЭ. Статград. 04.03.2025

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. Если количество камней в куче делится на целое \(k,\) то игрок может добавить в кучу \(k\) камней.

Например, если в куче \(6\) камней, то за один ход можно добавить \(1,\) \(2,\) \(3\) или \(6\) камней. Игра завершается, когда количество камней в куче становится более \(91.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(92\) или больше камней. В начале игры в куче было \(S\) камней, \(S < 92.\) Укажите минимальное значение \(S,\) при котором Петя не может выиграть первым ходом, но при любом первом ходе Пети Ваня может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых Петя не может выиграть первым ходом, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Вани. В ответе запишите найденные значения в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором у Вани есть стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволила бы ему гарантированно выиграть первым ходом.

Решение:

Python


def divisors(n):
    d = {1, n}
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return d

def moves(h):
    return tuple(h + d for d in divisors(h))

def game_over(pos):
    return pos > 91

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
        and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 92) if lose1(S)]
z20 = [S for S in range(1, 92) if win2(S)]
z21 = [S for S in range(1, 92) if lose2(S)]
print(min(z19))
print(min(z20), max(z20))
print(min(z21))

Ответ:
\(45\)
\(30 \,\, 44\)
\(29\)

Задания 19-21. Информатика. ЕГЭ. Статград. 28.01.2025-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. Если количество камней в куче делится на целое \(k\) (\(2 \leqslant k \leqslant 9\)), то игрок может убрать из кучи \(k\) камней. Если количество камней в куче не делится ни на одно из указанных чисел, игрок убирает один камень, после чего выполняет ход по описанному выше правилу.

Например, если в куче \(12\) камней, то за один ход можно убрать \(2, \, 3, \, 4\) или \(6\) камней, а если в куче \(11\) камней, то игрок за один ход сначала убирает один камень (остаётся \(10\)), а затем убирает \(2\) или \(5\) камней.

Игра завершается, когда количество камней в куче становится не более \(15.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(15\) или меньше камней.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых Петя не может выиграть первым ходом, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Вани. В ответе запишите найденные значения в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором у Вани есть стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволила бы ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    k = [x for x in range(2, 10) if h % x == 0]
    if k:
        return [h - x for x in k]
    else:
        h -= 1
        k = [x for x in range(2, 10) if h % x == 0]
        return [h - x for x in k]

def game_over(pos):
    return pos < 16

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(16, 1000) if lose1(S)]
z20 = [S for S in range(16, 1000) if win2(S)]
z21 = [S for S in range(16, 1000) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(22\)
\(24 \,\, 30\)
\(26\)

Задания 19-21. Информатика. ЕГЭ. Статград. 17.12.2024

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить любое из следующих действий:


убрать из кучи пять камней;
если количество камней в куче чётно, уменьшить его в два раза;
если количество камней в куче кратно трём, уменьшить его в три раза;
если количество камней в куче нечётно и не кратно трём, добавить один камень.
Например, если в куче \(12\) камней, то за один ход можно получить \(7,\) \(6\) или \(4\) камня, а если в куче \(11\) камней, то за один ход можно получить \(6\) или \(12\) камней. Игра завершается, когда количество камней в куче становится не более \(19.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(19\) или меньше камней.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых Петя не может выиграть первым ходом, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Вани. В ответе запишите найденные значения в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором у Вани есть стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволила бы ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    m = [h - 5,]
    if h % 2 == 0:
        m += [h // 2]
    if h % 3 == 0:
        m += [h // 3]
    if h % 2 and h % 3:
        m += [h + 1]
    return m

def game_over(pos):
    return pos <= 19

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(20, 1000) if lose1(S)]
z20 = [S for S in range(20, 1000) if win2(S)]
z21 = [S for S in range(20, 1000) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(25\)
\(40 \,\, 43\)
\(60\)

Задания 19-21. Информатика. ЕГЭ. Статград. 24.10.2024-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить любое из следующих трёх действий:

убрать из кучи один камень;
если количество камней в куче кратно трём, уменьшить его в три раза, в противном случае убрать из кучи два камня;
если количество камней в куче кратно пяти, уменьшить его в пять раз, в противном случае убрать из кучи три камня.
Например, если в куче \(12\) камней, то за один ход можно получить \(11\), \(4\) или \(9\) камней.

Игра завершается, когда количество камней в куче становится не более \(19\). Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(19\) или меньше камней.

В начале игры в куче было \(S\) камней, \(S > 19.\)

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых Петя не может выиграть первым ходом, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Вани. В ответе запишите найденные значения в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором у Вани есть стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволила бы ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h - 1, h // 3 if h % 3 == 0 else h - 2, h // 5 if h % 5 == 0 else h - 3

HEAP_SIZE = 20
heap = [None] * 200

for i in range(199, 19, -1):
    if any(x < HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(199, 19, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

print('Решение 19 задачи')
for i in range(199, 19, -1):
    if heap[i] == 'V1':
        print(i)

for i in range(199, 19, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

print('Решение 20 задачи. Выбери 2 минимальных значения')
for i in range(199, 19, -1):
    if heap[i] == 'P2':
        print(i)

for i in range(199, 19, -1):
    if not heap[i] and all(heap[x] in ('P1', 'P2') for x in moves(i)):
        heap[i] = 'V2'

print('Решение 21 задачи. Выбери минимальное значение')
for i in range(199, 19, -1):
    if heap[i] == 'V2':
        print(i)

Ответ:
\(23\)
\(26 \,\, 69\)
\(28\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 9.2.2025

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

добавить в кучу \(3\) камня;
добавить в кучу \(8\) камней;
увеличить количество камней в куче в \(2\) раза.
Например, из кучи в \(10\) камней за один ход можно получить кучу из \(13, \,18\) или \(20\) камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее \(333.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(333\) или более камней. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 332.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наибольшее из них.

Решение:

Python


def moves(h):
    return h + 3, h + 8, 2 * h

def game_over(pos):
    return pos > 332

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
            and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 333) if lose1(S)]
z20 = [S for S in range(1, 333) if win2(S)]
z21 = [S for S in range(1, 333) if lose2(S)]

print(min(z19))
print(z20[0], z20[-1])
print(max(z21))

Ответ:
\(164\)
\(82 \,\, 163\)
\(160\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 19.01.2025

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из обеих куч три камня или уменьшить количество камней в одной из куч в два раза (если количество камней в куче нечётно, остаётся на \(1\) камень меньше, чем убирается). Например, пусть в одной куче \(10,\) а в другой \(15\) камней; такую позицию мы будем обозначать \((10, \, 15).\) За один ход из позиции \((10, \, 15)\) можно получить любую из трёх позиций: \((7, \, 12),\) \((5, \, 15),\) и \((10, \, 7).\) Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более \(100.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет \(100\) или меньше камней. В начальный момент в первой куче было \(48\) камней, во второй куче — \(S\) камней, \(S > 52.\)

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите наименьшее значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    h1, h2 = h
    return (h1 - 3, h2 - 3), (h1 // 2, h2), (h1, h2 // 2)

def game_over(pos):
    return sum(pos) < 101

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(52, 1000) if lose1_bad([48, S])]
z20 = [S for S in range(52, 1000) if win2([48, S])]
z21 = [S for S in range(52, 1000) if lose2([48, S])]
print(min(z19))
print(z20[0], z20[-1])
print(min(z21))

Ответ:
\(59\)
\(115 \,\, 229\)
\(124\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 18.12.2024

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит одна куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу три камня, увеличить количество камней в куче в три раза или добавить в кучу возведённое в квадрат количество камней в ней. Например, пусть в куче \(10\) камней, тогда игрок после своего хода может получить кучу из \(13\) камней, \(30\) камней или \(110\) камней. Игра завершается в тот момент, когда количество камней в куче становится более \(665.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в куче будет \(666\) или больше камней. В начальный момент в куче было \(S\) камней, \(S < 666.\)

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания

21

Для игры, описанной в задании 19, найдите наибольшее значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 3, 3 * h, h + h**2

def game_over(pos):
    return pos > 665

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 666) if lose1_bad(S)]
z20 = [S for S in range(1, 666) if win2(S)]
z21 = [S for S in range(1, 666) if lose2(S)]
print(min(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(5\)
\(8 \,\, 22\)
\(19\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 30.11.2024

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый делает Петя. За один ход может: убрать из кучи три камня или убрать из кучи пять камней или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до большего). Например, из кучи в \(20\) камней за один ход можно получить кучу из \(17\), \(15\) или \(7\) камней. Игра завершается, когда количество камней в куче становится не более \(33.\)

Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(33\) или меньше камней. В начальный момент времени в куче было \(S\) камней, \(S \geqslant 34.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. При каких значениях \(S\) Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом? В ответе укажите одно число — количество таких значений.

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S\), при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры описанной в задании 19, найдите минимальное значение \(S\), при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import ceil

def moves(h):
    return h - 3, h - 5, ceil( h / 3)

stones = [None] * 400

MIN_SIZE = 34
for i in range(34, 400):
    if any(x < MIN_SIZE for x in moves(i)):
        stones[i] = 'P1'
print('Решение 19 задачи')
z19 = []
for i in range(34, 400):
    if not stones[i] and all(stones[x] == 'P1' for x in moves(i)):
        stones[i] = 'V1'
        # print(i)
        z19.append(i)
print(len(z19))
print('Решение 20 задачи')
z20 = []
for i in range(34, 400):
    if not stones[i] and any(stones[x] == 'V1' for x in moves(i)):
        stones[i] = 'P2'
        #print(i)
        z20.append(i)
print(min(z20), max(z20))
print('Решение 21 задачи')
z21 = []
for i in range(34, 400):
    if not stones[i] and any(stones[x] == 'P1' or stones[x] == 'P2' for x in moves(i)):
        stones[i] = 'V2'
        #print(i)
        z21.append(i)
print(min(z21))

Ответ:
\(3\)
\( 103 \,\, 306\)
\(108\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 6.11.2024

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу \(2\) или \(3\) камня, либо увеличить количество камней в куче в \(3\) раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится менее \(313\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из \(313\) или более камней.

В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 312\).

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S\), при которых у Пети есть выигрышная стратегия, причём выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите сумму таких значений \(S\), при которых одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    return h + 2, h + 3, 3 * h

HEAP_SIZE = 312
heap = [None] * (HEAP_SIZE + 1)

for h in range(1, HEAP_SIZE + 1):
    if any(x > HEAP_SIZE for x in moves(h)):
        heap[h] = 'P1'

print('19 задание')
for h in range(1, HEAP_SIZE + 1):
    if not heap[h] and all(heap[x] == 'P1' for x in moves(h)):
        heap[h] = 'V1'
        print(h)

print('20 задание')
for h in range(1, HEAP_SIZE + 1):
    if not heap[h] and any(heap[x] == 'V1' for x in moves(h)):
        heap[h] = 'P2'
        print(h)

print('21 задание')
for h in range(1, HEAP_SIZE + 1):
    if not heap[h] and all(heap[x] in ('P1', 'P2') for x in moves(h)):
        heap[h] = 'V2'
        print(h)

Ответ:
\(207\)
\(100 \,\, 102\)
\(197\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 18.10.2024

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на \(1\) камень больше, чем убирается). Например, пусть в одной куче \(6,\) а в другой \(9\) камней; такую позицию мы будем обозначать \((6, \, 9).\) За один ход из позиции \((6, \, 9)\) можно получить любую из трёх позиций: \((3, \, 9),\) \((6, \, 6),\) и \((6, \, 5).\) Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более \(72.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет \(72\) или меньше камней. В начальный момент в первой куче было \(50\) камней, во второй куче — \(S\) камней; \(S > 22.\)

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение \(S,\) когда такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите минимальное и максимальное значения \(S,\) при котором у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите наибольшее значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import ceil

def moves(pos):
    h1, h2 = pos
    return (h1 - 3, h2), (h1, h2 - 3), (ceil(h1 / 2), h2), (h1, ceil(h2 / 2))

def game_over(pos):
    return sum(pos) <= 72

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(23, 1000) if lose1_bad([50, S])]
z20 = [S for S in range(23, 1000) if win2([50, S])]
z21 = [S for S in range(23, 1000) if lose2([50, S])]
print(max(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(94\)
\(51 \,\, 100\)
\(103\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 4.10.2024

19

(Д. Бахтиев) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) три камня или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(77.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах оказывается \(77\) или больше камней.

В начальный момент в первой куче было \(12\) камней, во второй куче — \(S\) камней; \(1 \leqslant S \leqslant 64.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение \(S,\) при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значения \(S,\) при которых одновременно выполняются два условия:

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

Решение:

Python


def moves(pos):
    h1, h2 = pos
    return (h1 + 3, h2), (h1, h2 + 3), (3 * h1, h2), (h1, 3 * h2)

def game_over(pos):
    return sum(pos) >= 77

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 65) if lose1([12, S])]
z20 = [S for S in range(1, 65) if win2([12, S])]
z21 = [S for S in range(1, 65) if lose2([12, S])]
print(min(z19))
print(*z20[:2])
print(len(z21))

Ответ:
\(21\)
\(7 \,\, 18\)
\(2\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 19.09.2024

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи три камня или убрать из кучи пять камней или уменьшить количество камней в куче в два раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в \(20\) камней за один ход можно получить кучу из \(17,\) \(15\) или \(10\) камней. Игра завершается, когда количество камней в куче становится не более \(17.\) Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет \(17\) или меньше камней. В начальный момент в куче было \(S\) камней, \(S \geqslant 18.\) Будем гворить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) при которых у Пети есть выигрышная стратегия, причём выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите максимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import floor

def moves(h):
    return h - 3, h - 5, floor(h / 2)

def game_over(pos):
    return pos <= 17

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))


z19 = [S for S in range(18, 1000) if lose1(S)]
z20 = [S for S in range(18, 1000) if win2(S)]
z21 = [S for S in range(18, 1000) if lose2(S)]
print(min(z19))
print(min(z20), max(z20))
print(max(z21))

Ответ:
\(36\)
\(39 \,\, 77\)
\(80\)

Задания 19-21. Информатика. ЕГЭ. Шастин. 29.08.2024

19

(Л. Шастин) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу два камня или увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее \(54.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(54\) или больше камней. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 53.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход:
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений \(S,\) в ответе запишите наименьшее из них.

Решение:

Python


def moves(h):
    return h + 2, 2 * h

def game_over(pos):
    return pos >= 54

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 54) if lose1(S)]
z20 = [S for S in range(1, 54) if win2(S)]
z21 = [S for S in range(1, 54) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(25\)
\(13 \,\, 23\)
\(21\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7678

19

(И. Баженов) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит две кучи камней. Игроки ходят по очереди, первый ход делает Петя. У каждого игрока есть 4 варианта хода: 1) добавить четыре камня в первую кучу; 2) добавить три камня во вторую кучу; 3) увеличить в \(2\) раза количество камней в первой куче; 4) увеличить в \(3\) раза количество камней во второй куче. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее \(178.\) Победителем считается игрок, сделавший последний ход, т. е. первым получивший суммарно в двух кучах \(178\) или больше камней. В начальный момент в первой куче был \(21\) камень, во второй куче было \(S\) камней; \(1 \leqslant S \leqslant 156.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) при котором такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите сумму всех значений \(S,\) при которых Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
20

Для игры, описанной в задании 19, найдите произведение всех значений \(S,\) при которых одновременно выполняются два условия:

у Пети есть выигрышная стратегия, позволяющая ему выиграть первым, вторым или третьим ходом при любой игре Вани;
у Пети нет стратегии, которая позволит ему гарантированно выиграть первым или вторым ходом.

Решение:

Python


def moves(pos):
    h1, h2 = pos
    return (h1 + 4, h2), (h1, h2 + 3), (2 * h1, h2), (h1, 3 * h2)

def gameOver(pos):
    return sum(pos) >= 178

def win1(pos):
    return not gameOver(pos) and any(gameOver(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

def win3(pos):
    return not win1(pos) and not win2(pos) and any(lose2(m) for m in moves(pos))

z19 = [S for S in range(1, 157) if lose1_bad((21, S))]
z20 = [S for S in range(1, 157) if win2((21, S))]
z21 = [S for S in range(1, 157) if win3((21, S))]
print(min(z19))
print(sum(z20))
p = 1
for x in z21:
    p *= x
print(p)

Ответ:
\(18\)
\(253\)
\(1004640\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7568

19

(ЕГЭ-2024) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(227.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах оказывается \(227\) или больше камней. В начальный момент в первой куче было \(17\) камней, во второй куче – \(S\) камней; \(1 \leqslant S \leqslant 209.\)

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) при котором такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def gameOver(pos):
    return sum(pos) >= 227

def moves(pos):
    h1, h2 = pos
    return (h1 + 1, h2), (h1, h2 + 1), (2 * h1, h2), (h1, 2 * h2)

def win1(pos):
    return not gameOver(pos) and any(gameOver(p) for p in moves(pos))

def lose1_bad(pos):
    return any(win1(p) for p in moves(pos))

def lose1(pos):
    return all(win1(p) for p in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(p) for p in moves(pos))

def lose2(pos):
    return all(win1(p) or win2(p) for p in moves(pos)) \
           and any(win2(p) for p in moves(pos))

z19 = [S for S in range(1, 210) if lose1_bad((17, S))]
z20 = [S for S in range(1, 210) if win2((17, S))]
z21 = [S for S in range(1, 210) if lose2((17, S))]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(53\)
\(96 \,\, 104\)
\(95\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7567

19

(ЕГЭ-2024) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или три камня либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее \(39.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(39\) камней или больше. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 38.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def gameOver(pos):
    return pos >= 39

def moves(pos):
    return pos + 1, pos + 3, 2 * pos

def win1(pos):
    return not gameOver(pos) and any(gameOver(p) for p in moves(pos))

def lose1(pos):
    return all(win1(p) for p in moves(pos))

def win2(pos):
    return not gameOver(pos) and any(lose1(p) for p in moves(pos))

def lose2(pos):
    return all(win1(p) or win2(p) for p in moves(pos)) \
           and any(win2(p) for p in moves(pos))

z19 = [S for S in range(1,38) if lose1(S)]
z20 = [S for S in range(1,38) if win2(S)]
z21 = [S for S in range(1,38) if lose2(S)]

print(min(z19))
print(*z20)
print(min(z21))

Ответ:
\(19\)
\(16 \,\, 18\)
\(15\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7528

20

(ЕГЭ-2024) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее \(58.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(58\) камней или больше. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 57.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(pos):
    return pos + 1, pos + 4, 2 * pos

def gameOver(pos):
    return pos >= 58

def win1(pos):
    return not gameOver(pos) and any(gameOver(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 58) if lose1(S)]
z20 = [S for S in range(1, 58) if win2(S)]
z21 = [S for S in range(1, 58) if lose2(S)]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(28\)
\(14 \,\, 24\)
\(23\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7490

19

(ЕГЭ-2024) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее \(65.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах оказывается 65 или больше камней. В начальный момент в первой куче было шесть камней, во второй куче – \(S\) камней; \(1 \leqslant S \leqslant 58.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение \(S,\) при котором такая ситуация возможна.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(pos):
    h1, h2 = pos
    return (h1 + 1, h2), (h1, h2 + 1), (3 * h1, h2), (h1, 3 * h2)

def game_over(pos):
    return sum(pos) >= 65

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def lose1_bad(pos):
    return any(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 59) if lose1_bad((6, S))]
z20 = [S for S in range(1, 59) if win2((6, S))]
z21 = [S for S in range(1, 59) if lose2((6, S))]
print(min(z19))
print(*z20[:2])
print(min(z21))

Ответ:
\(7\)
\(10 \,\, 19\)
\(18\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7384

19

(А. Минак) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень либо увеличить количество камней в куче в два раза. Например, имея кучу из \(10\) камней, за один ход можно получить кучу из \(11\) или \(20\) камней. Для того чтобы делать ходы, у игроков есть только \(80\) камней, включая те, которые находятся в куче в начальный момент. Игра завершается в тот момент, когда количество камней в куче становится не менее \(61.\) Победителем считается игрок, сделавший последний ход. В начальный момент в куче было \(S\) камней; \(1 \leqslant S \leqslant 60.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Укажите количество значений \(S,\) при которых Петя может выиграть своим первым ходом.

20

Для игры, описанной в задании 19, найдите два наименьших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(pos):
    if pos < 41:
        return pos + 1, 2 * pos
    return (pos + 1, )

def game_over(pos):
    return pos >= 61

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 61) if win1(S)]
z20 = [S for S in range(1, 61) if win2(S)]
z21 = [S for S in range(1, 61) if lose2(S)]
print(len(z19))
print(*z20[:2])
print(*z21)

Ответ:
\(11\)
\(15 \,\, 29\)
\(57\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7383

19

(А. Минак) Два игрока, Петя и Ваня, играют в следующую игру. На координатной плоскости стоит фишка. Игроки ходят по очереди, первый ход делает Петя. Ход состоит в том, что игрок перемещает фишку из точки с координатами \((x, \, y)\) в одну из трех точек: \((x-10, \, y+5),\) \((x-5, \, y-5),\) \((x+5, y-5).\) Например, при если фишка стоит в позиции \((10, \,5),\) то за один ход можно получить любую из трёх позиций: \((0, \,10),\) \((5, \, 0),\) \((15, \, 0).\) Игра завершается в тот момент, когда расстояние от фишки до точки с координатами \((0, \, 0)\) становится больше \(20\) единиц. Победителем считается игрок, сделавший последний ход, т.е. первым получивший позицию, от которой расстояние до точки с координатами \((0, \, 0)\) больше \(20\) единиц. В начальный момент фишка находится в позиции \((-1, \, S),\) где \(S\) — целое число. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Укажите количество всех возможных \(S,\) при которых игра имеет смысл, т. е. для которых расстояние от начальной позиции до точки с координатами \((0, \, 0)\) не больше \(20.\)

20

Для игры, описанной в задании 19, найдите два числа: первое – количество значения \(S,\) при которых Петя выигрывает первым ходом; и второе число – количество значений \(S\) при которых, у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
21

Для игры, описанной в задании 19, найдите максимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import dist

def moves(pos):
    x, y = pos
    return (x - 10, y + 5), (x - 5, y - 5), (x + 5, y - 5)

def game_over(pos):
    p0 = (0, 0)
    return dist(p0, pos) > 20

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(-30, 30) if not game_over((-1, S))]
z20_1 = [S for S in z19 if win1((-1, S))]
z20_2 = [S for S in z19 if win2((-1, S))]
z21 = [S for S in z19 if lose2((-1, S))]
print(len(z19))
print(len(z20_1), len(z20_2))
print(max(z21))

Ответ:
\(39\)
\(13 \,\, 2\)
\(2\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7382

19

(А. Минак) Два игрока, Петя и Ваня, играют в следующую игру. У игроков есть табличка, в которую записана пара неотрицательных целых чисел. Будем называть эту пару чисел позицией. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может заменить одно из чисел пары (по своему выбору) на сумму обоих чисел. Так, например, если перед ходом игрока была позиция \((2, \, 20),\) то после его хода будет позиция \((22, \,20)\) или \((2, \, 22).\) Игра завершается в тот момент, когда сумма чисел пары станет не менее \(62.\) Победителем считается игрок, сделавший последний ход, т.е. первым получивший в сумму чисел пары \(62\) и более. В начальный момент в табличке записана пара чисел \((10, \, S),\) \(1 \leqslant S \leqslant 51.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Найдите минимальное значение \(S,\) при котором Петя может выиграть за один ход.

20

Для игры, описанной в задании 19, найдите два наибольших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите количество значений \(S,\) при которых одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(h):
    s = sum(h)
    h1, h2 = h
    return (s, h2), (h1, s)

def game_over(heap):
    return sum(heap) >= 62

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 52) if win1((10, S))]
z20 = [S for S in range(1, 52) if win2((10, S))]
z21 = [S for S in range(1, 52) if lose2((10, S))]
print(min(z19))
print(z20[-2], z20[-1])
print(len(z21))

Ответ: \(26\)
\(14 \,\, 15\)
\(4\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7381

19

(А. Минак) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи два или три камня либо уменьшить количество камней в куче в два раза. В случае, если уменьшается в два раза нечётное количество камней, то сначала убирают один камень, а затем уменьшают в два раза. Например, имея кучу из \(11\) камней, за один ход можно получить кучу из \(9,\) \(8\) или \(5\) камней. Нельзя убрать больше камней, чем их имеется в куче. Игра завершается в тот момент, когда в куче не останется камней. При этом победителем считается игрок, сделавший последний ход. В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 30.\) Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

Для игры, описанной в задании 19, найдите два наибольших значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке убывания.

21

Для игры, описанной в задании 19, найдите наибольшее значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


from math import floor

def moves(pos):
    match pos:
        case 1: return 0,
        case 2: return 0, 1
        case 3: return 0, 1
        case _: return pos - 2, pos - 3, floor(pos / 2)

def game_over(heap):
    return heap == 0

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 31) if lose1(S)]
z20 = [S for S in range(1, 31) if win2(S)]
z21 = [S for S in range(1, 31) if lose2(S)]
print(len(z19))
print(z20[-1], z20[-2])
print(max(z21))

Ответ:
\(2\)
\(11 \,\, 10\)
\(13\)

Задания 19-21. Информатика. ЕГЭ. Поляков-7380

19

(Е. Джобс) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу четыре камня или увеличить количество камней в куче в два раза. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее \(20.\) Если при этом в куче оказалось не более \(26\) камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник (при этом победа учитывается как ход противника). В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 19.\)

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

20

Для игры, описанной в задании 19, найдите наименьшее и наибольшее значения \(S,\) когда Петя имеет выигрышную стратегию, причём одновременно выполняются два условия:

Петя не может выиграть за один ход;
Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21

Для игры, описанной в задании 19, найдите минимальное значение \(S,\) при котором одновременно выполняются два условия:

у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение:

Python


def moves(pos):
    d, f = pos
    if d > 26:
        return (d, True),
    return (d + 4, f), (2 * d, f)

def game_over(pos):
    return pos[1] or 20 <= pos[0] <= 26

def win1(pos):
    return not game_over(pos) and any(game_over(m) for m in moves(pos))

def lose1(pos):
    return all(win1(m) for m in moves(pos))

def win2(pos):
    return not win1(pos) and any(lose1(m) for m in moves(pos))

def lose2(pos):
    return all(win1(m) or win2(m) for m in moves(pos)) \
           and any(win2(m) for m in moves(pos))

z19 = [S for S in range(1, 20) if lose1((S, False))]
z20 = [S for S in range(1, 20) if win2((S, False))]
z21 = [S for S in range(1, 20) if lose2((S, False))]
print(min(z19))
print(min(z20), max(z20))
print(min(z21))

Ответ:
\(6\)
\(2 \,\, 7\)
\(1\)

Задания 19-21. Информатика. 2023-5

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Например, имея кучу из \(19\) камней, за один ход можно получить кучу из \(20\) или \(38\) камней. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(181\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(181\) или больше камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 180\).

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

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

Найденные значения запишите в ответе в порядке возрастания.

21

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

Решение:

Python


def print_heap(val: str):
    for i in range(HEAP_SIZE):
        if heap[i] == val:
            print(i, end='')
            print(' ', end='')
    print()
    

def moves(h):
    return h+1, 2*h

HEAP_SIZE = 180
heap = [None] * (HEAP_SIZE + 1)

for i in range(HEAP_SIZE, 0, -1):
    if any( x > HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' or heap[x] == 'P2' for x in moves(i)):
        heap[i] = 'V2'

print_heap('V1')
print_heap('P2')
print_heap('V2')

Python (рекурсивное решение)


from functools import lru_cache

def moves(h):
    return h+1, 2*h

@lru_cache(None)
def f(h):
    if h > 180:
        return 'END'
    elif any(f(x) == 'END' for x in moves(h)):
        return 'P1'
    elif all(f(x) == 'P1' for x in moves(h)):
        return 'V1'
    elif any(f(x) == 'V1' for x in moves(h)):
        return 'P2'
    elif all(f(x) == 'P1' or f(x) == 'P2' for x in moves(h)):
        return 'V2'

P1 = []
V1 = []
P2 = []
V2 = []
for i in range(1, 180):
    if f(i) == 'P1':
        P1.append(i)
    elif f(i) == 'V1':
        V1.append(i)
    elif f(i) == 'P2':
        P2.append(i)
    elif f(i) == 'V2':
        V2.append(i)

print(V1)
print(P2)
print(V2)

Ответ:
\(90\)
\(45 \,\, 89\)
\(88\)

Задания 19-21. Информатика. 2023-4

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(161\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(161\) или больше камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 160\).

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

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

Найденные значения запишите в ответе в порядке возрастания.

21

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

Решение:

Python


def print_heap(val: str):
    for i in range(HEAP_SIZE):
        if heap[i] == val:
            print(i, end='')
            print(' ', end='')
    print()
    

def moves(h):
    return h+1, 2*h

HEAP_SIZE = 160
heap = [None] * (HEAP_SIZE + 1)

for i in range(HEAP_SIZE, 0, -1):
    if any( x > HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' or heap[x] == 'P2' for x in moves(i)):
        heap[i] = 'V2'

print_heap('V1')
print_heap('P2')
print_heap('V2')

Python (рекурсивное решение)


from functools import lru_cache

def moves(h):
    return h+1, 2*h

@lru_cache(None)
def f(h):
    if h > 160:
        return 'END'
    elif any(f(x) == 'END' for x in moves(h)):
        return 'P1'
    elif all(f(x) == 'P1' for x in moves(h)):
        return 'V1'
    elif any(f(x) == 'V1' for x in moves(h)):
        return 'P2'
    elif all(f(x) == 'P1' or f(x) == 'P2' for x in moves(h)):
        return 'V2'

P1 = []
V1 = []
P2 = []
V2 = []
for i in range(1, 160):
    if f(i) == 'P1':
        P1.append(i)
    elif f(i) == 'V1':
        V1.append(i)
    elif f(i) == 'P2':
        P2.append(i)
    elif f(i) == 'V2':
        V2.append(i)

print(V1)
print(P2)
print(V2)

Ответ:
\(80\)
\(40 \,\, 79\)
\(78\)

Задания 19-21. Информатика. 2023-3

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(153\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(153\) или больше камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 152\).

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

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

Найденные значения запишите в ответе в порядке возрастания.

21

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

Решение:

Python


def print_heap(val: str):
    for i in range(HEAP_SIZE):
        if heap[i] == val:
            print(i, end='')
            print(' ', end='')
    print()
    

def moves(h):
    return h+1, 2*h

HEAP_SIZE = 152
heap = [None] * (HEAP_SIZE + 1)

for i in range(HEAP_SIZE, 0, -1):
    if any( x > HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' or heap[x] == 'P2' for x in moves(i)):
        heap[i] = 'V2'

print_heap('V1')
print_heap('P2')
print_heap('V2')

Python (рекурсивное решение)


from functools import lru_cache

def moves(h):
    return h+1, 2*h

@lru_cache(None)
def f(h):
    if h > 152:
        return 'END'
    elif any(f(x) == 'END' for x in moves(h)):
        return 'P1'
    elif all(f(x) == 'P1' for x in moves(h)):
        return 'V1'
    elif any(f(x) == 'V1' for x in moves(h)):
        return 'P2'
    elif all(f(x) == 'P1' or f(x) == 'P2' for x in moves(h)):
        return 'V2'

P1 = []
V1 = []
P2 = []
V2 = []
for i in range(1, 152):
    if f(i) == 'P1':
        P1.append(i)
    elif f(i) == 'V1':
        V1.append(i)
    elif f(i) == 'P2':
        P2.append(i)
    elif f(i) == 'V2':
        V2.append(i)

print(V1)
print(P2)
print(V2)

Ответ:
\(76\)
\(38 \,\, 75\)
\(74\)

Задания 19-21. Информатика. 2023-2

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(301\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(301\) или больше камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 300\).

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

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

Найденные значения запишите в ответе в порядке возрастания.

21

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

Решение:

Python


def print_heap(val: str):
    for i in range(HEAP_SIZE):
        if heap[i] == val:
            print(i, end='')
            print(' ', end='')
    print()
    

def moves(h):
    return h+1, 2*h

HEAP_SIZE = 300
heap = [None] * (HEAP_SIZE + 1)

for i in range(HEAP_SIZE, 0, -1):
    if any( x > HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' or heap[x] == 'P2' for x in moves(i)):
        heap[i] = 'V2'

print_heap('V1')
print_heap('P2')
print_heap('V2')

Ответ:
\(150\)
\(75 \,\, 149\)
\(148\)

Задания 19-21. Информатика. 2023-1

19

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится не менее \(229\). Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из \(229\) или больше камней.

В начальный момент в куче было \(S\) камней, \(1 \leqslant S \leqslant 228\).

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

20

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

Найденные значения запишите в ответе в порядке возрастания.

21

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

Решение:

Python


def print_heap(val: str):
    for i in range(HEAP_SIZE):
        if heap[i] == val:
            print(i, end='')
            print(' ', end='')
    print()
    

def moves(h):
    return h+1, 2*h

HEAP_SIZE = 228
heap = [None] * (HEAP_SIZE + 1)

for i in range(HEAP_SIZE, 0, -1):
    if any( x > HEAP_SIZE for x in moves(i)):
        heap[i] = 'P1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' for x in moves(i)):
        heap[i] = 'V1'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and any(heap[x] == 'V1' for x in moves(i)):
        heap[i] = 'P2'

for i in range(HEAP_SIZE, 0, -1):
    if not heap[i] and all(heap[x] == 'P1' or heap[x] == 'P2' for x in moves(i)):
        heap[i] = 'V2'

print_heap('V1')
print_heap('P2')
print_heap('V2')

Ответ:
\(114\)
\(57 \,\, 113\)
\(112\)