Задача к ЕГЭ по информатике на тему «Теория игр» №4

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

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

— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Решение руками

Если второй ход Пети приведет его в область проигрыша, значит, в этой позиции Ваня победит в игре своим вторым ходом.

Такие позиции происходят при 83  и 84  камнях. В независимости какие ходы будет делать Петя, он всё равно проиграет.

Поскольку в условии нас просят ввести минимальное значение, то в ответ записываем 83  .

Решение программой

from  functools import lru_cache
lru_cache(None)
def f(a,c):# параметр ’с’ в этой программе - это счётчик,сделанных ходов в данной партии.
    # В данной задаче он обязателен,поскольку изначальное кол-во камней может быть слишком мало,а также есть ходы,которые не так сильно увеличивают кол-во камней в куче(+2,+4),как,например ход (*3).
    # По этой причине у нас может возникнуть ошибка,связанная с превышением глубины рекурсии или же программа будет слишком долго высчитывать значения.
    if a >= 271:return 0
    if c > 7:return 1000 #Возвращаем очень большое значение,которое указывает программе,что при таком значении невозможно дойти до выигрыша при малом количестве ходов.
    t = [f(a+2,c+1),f(a+4,c+1),f(a*3,c+1)]
    n = [i for i in t if i <= 0]
    if n:return -max(n) + 1
    return -max(t)

for i in range(1,272):
    if f(i,0) == -2:
        print(i)
        break

Ответ: 83
Оцените статью
Я решу все!