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

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

Какое наименьшее число камней могло быть суммарно в двух кучах?

Возьмём минимально возможную сумму: 61  . Пусть в одной куче был 1  камень, тогда, во второй куче камней было от 30  до 59  . Так как нам необходимо минимальное количество камней, то берем число 30  . Общая сумма: 1 + 30 = 31  .

Программная реализация:

from functools import lru_cache
@lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 61:
        return 0
    if c > 2:
        return 10000
    if a > b: t = [f(a+i,b,c+1) for i in range(1, a+1)]
    else: t = [f(a,b+i,c+1) for i in range(1, b+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)
ans = []
for i in range(1,61):
    for j in range(1,61):
        if f(i,j) == 1:
            ans += [i+j]
print(min(ans))

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