Задача к ЕГЭ по информатике на тему «задачи под вебы» №1

Источник: https://kpolyakov.spb.ru/

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

В начальный момент в первой куче было 5 камней, во второй куче – S  камней; 1 ≤ S ≤ 38  .

1. При каких S  : 1a) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?

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

3. Назовите значение S  , при котором Ваня выигрывает своим первым или вторым ходом.

В ответе укажите сначала левую границу отрезка из ответа на вопрос 1a), затем через пробел правую, затем через пробел ответ на вопрос 1б), затем через пробел ответ на 2 вопрос, затем через пробел ответ на вопрос 3.

from functools import *
@lru_cache(None)
def f(a, b):
    if a >= 44: return 0
    n = [f(a+2, b), f(a*2, b), f(a, b+2), f(a, b*2)]
    t = [i for i in n if i <= 0]
    if t: return -max(t)+1
    else: return -max(n)
for i in range(1, 39):
    if f(5, i) == 1: print(i)

Для пункта 1б) следует поменять последнюю строку на:

if f(5, i) == -1: print(i)

Для пункта 2) следует поменять последнюю строку на:

if f(5, i) == 2: print(i)

Для пункта 3) следует поменять последнюю строку на:

if f(5, i) == -2: print(i)

Варианты правильных ответов:
  1. 20 38 19 16 14
  2. 20 38 19 17 14
  3. 20 38 19 18 14
Оцените статью
Я решу все!