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

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

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

Путём небольшого перебора находим 5  значений S : 38,37,23,21,20.  В каждой из этих позиций есть ход, который приведёт Ваню в позицию LOSE1  , значит они нам подходят.

 

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

from functools import lru_cache

def moves(heap):
    a, b, c = heap
    m = []
    if a >= 1:
        m += [(a - 1, b, c)]
        if a > 1:
            m += [((a + 1) // 2, b, c)]
    if b >= 1:
        m += [(a, b - 1, c)]
        if b > 1:
            m += [(a, (b + 1) // 2, c)]
    if c >= 1:
        m += [(a, b, c - 1)]
        if c > 1:
            m += [(a, b, (c + 1) // 2)]
    return m

@lru_cache(None)
def game(heap):
    if sum(heap) <= 16:
        return ’END’
    elif any(game(x) == ’END’ for x in moves(heap)):
        return ’WIN1’
    elif all(game(x) == ’WIN1’ for x in moves(heap)):
        return ’LOSE1’
    elif any(game(x) == ’LOSE1’ for x in moves(heap)):
        return ’WIN2’
    elif all(game(x) == ’WIN1’ or game(x) == ’WIN2’ for x in moves(heap)):
        return ’LOSE2’

counter = 0
for s in range(10, 100):
    if game((3, 4, s)) == ’WIN2’:
        counter += 1
print(counter)

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