Как дополнительно оптимизировать код, чтобы преодолеть ошибку TLE? - PullRequest
1 голос
/ 09 мая 2019

Я решаю некоторые проблемы из CodeChef, но я застрял на проблеме https://www.codechef.com/MAY19B/problems/MATCHS.I получил эту проблему является проблема динамического программирования. Так что я использовал functools.lru_cache для сохранения результатов функции. Но я получаю ошибку TLE в некоторые тестовые случаи. Как я могу дополнительно оптимизировать код? Следующая проблема:

Ари и Рич играют в довольно запутанную игру. Вот правила игры:

1. The game is played with two piles of matches. Initially, the first pile 
  contains N matches and the second one contains M matches.
2. The players alternate turns; Ari plays first.
3. On each turn, the current player must choose one pile and remove a 
  positive number of matches (not exceeding the current number of matches 
  on that pile) from it.
4. It is only allowed to remove X matches from a pile if the number of 
  matches in the other pile divides X.
5. The player that takes the last match from any pile wins.

Решить (N, M)
1. Если ход его Ари и N% M == 0, тогда Ари выигрывает, а Рич выигрывает.
2. Если N% M! = 0, то игрок пробует все возможные ходы и проверяет, выиграл ли он один из них. в итоге.

from functools import lru_cache 

@lru_cache(maxsize=None)
def Solve(X,Y,Player=True):
    if X%Y==0:
        return Player
    else:
        temp=X
        X=X%Y
        if Player==Solve(max(X,Y),min(X,Y),not Player):
            return Player
        while temp!=X+Y:
            X=X+Y
            if Player==Solve(max(X,Y),min(X,Y),not Player):
                return Player
        return not Player

Ответы [ 2 ]

1 голос
/ 10 мая 2019

В игру играют с двумя кучами матчей.Первоначально первая куча содержит N совпадений, а вторая содержит M совпадений.2. Игроки чередуются ходами;Ари играет первым.3. На каждом ходу текущий игрок должен выбрать одну стопку и удалить из нее положительное количество совпадений (не превышающее текущего количества совпадений в этой стопке).4. Удалять X матчей из колоды разрешается только в том случае, если количество совпадений в другой куче делит X. 5. Игрок, который берет последний матч из любой колоды

0 голосов
/ 11 мая 2019

Как насчет хранения? Вычисления для значений x и y, предположим, что ваша функция решения натолкнулась на некоторый элемент (14,5), затем она вычислит, кто победит, используя цикл while, и вернет вам некоторое значение.Теперь предположим, что ваша функция встречает (19,5), тогда она вычислит значение для (4,5), (9,5), (14,5).И здесь, как видите, (14,5) вычисляется дважды.Теперь представьте сценарий, когда числа 10 ^ 6 и 10 ^ 9 большие, в этом случае ваша программа будет тратить много времени на вычисление значения в том случае, значение которого уже рассчитано.Итак, наконец

> Попробуйте сохранить предварительно вычисленные значения в список

...