МУМ5 → Информатика → задания → № 19

Задание 19 ЕГЭ информатика

Логическая игра: выигрыш первым ходом

Условие игры к заданиям 19–21

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

– добавить в одну из куч (по своему выбору) 4 камня;

– увеличить количество камней в одной из куч (по своему выбору) в 2 раза.

Например, пусть в одной куче 20 камней, а в другой 30 камней; такую позицию в игре обозначим (20, 30). Тогда за один ход можно получить любую из четырёх позиций: (24, 30), (20, 34), (40, 30), (20, 60).

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее 133. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно 133 камня или больше. В начальный момент в первой куче было 17 камней, во второй куче – SS камней; 1≤S≤1151 \le S \le 115.

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

Источник: ФИПИ, проект демоверсии ЕГЭ 2027, с. 18

Как это было в демоверсии 2027

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

Источник: ФИПИ, проект демоверсии ЕГЭ 2027, с. 18

Решение и ответ
  1. Здесь не нужна стратегия: достаточно, чтобы Петя сделал неудачный ход, а Ваня сразу набрал 133.

  2. Самый «быстрый» вариант — оба удваивают вторую кучу: 17+4S≥13317 + 4S \ge 133, то есть S≥29S \ge 29. При S=29S = 29: Петя делает (17, 58), Ваня — (17, 116), всего 133.

  3. Проверка перебором:

  4. def moves(a, b):
        return (a + 4, b), (a, b + 4), (2 * a, b), (a, 2 * b)
    
    for s in range(1, 116):
        # есть ход Пети, после которого он не выиграл, а Ваня выигрывает сразу
        if any(x + y < 133 and any(u + v >= 133 for u, v in moves(x, y))
               for x, y in moves(17, s)):
            print(s)
            break
    

Ответ: 29

Разбор задания 19 демоверсии →

Собрать пробник