Оптимизировать код для задачи "Игра в чётные/нечётные числа"

  • Ограничение времени: 1 секунда

  • Ограничение памяти: 256Mb

  • Ввод: стандартный ввод или input.txt

  • Вывод: стандартный вывод или output.txt


Вы с другом играете в очень интересную игру, которая заключается в следующем: Также задано целое неотрицательное число n. Порядок действий такой:

  1. Если число n чётное, то вы можете поделить его на два или отнять 1.
  2. Если же оно нечётное, то вы только можете отнять 1. Затем ход переходит к сопернику.

Соперник может выполнять такие же действия, как и Вы. Когда n становится равным 0, игра заканчивается.

Проигрывает тот игрок, который не может сделать ход. Первым ходите Вы.

Узнайте, кто победит. Игроки располагают всей информацией (о правилах игры, возможных ходах, положении соперника).

Формат ввода:

В первой строке входных данных вам даётся натуральное число t (1 ≤ t ≤ 10⁶) — количество наборов входных данных. Далее следуют t наборов входных данных. Каждый набор входных данных состоит из одной строки, содержащей целое неотрицательное число n (0 ≤ n ≤ 10⁶).

Формат вывода:

Для каждого набора выведите «Yes» в случае вашей победы или «No» в противном случае. Выводить можно в любом регистре.

Программу уже написал, но на 4-ом тесте выходит ошибка "time-limit-exceeded":

def can_player_one_win(n):
    return "Yes" if (n % 2 == 0 and n > 3) or n in (1, 3) else "No"

count = int(input())
results = [0] * count
for i in range(count):
    results[i] = can_player_one_win(int(input()))
for result in results:
    print(result)

Ответы (1 шт):

Автор решения: Qwertiy
results = [0] * count

Нет смысла огромный список заводить, выводи результат сразу.

"Yes" if (n % 2 == 0 and n > 3) or n in (1, 3) else "No"

Предположу (не проверял), что так эффективнее:

"Yes" if (n < 4 if n & 1 else n > 3) else "No"
def can_player_one_win(n):

Заинлайни её - нет смысла вызывать функцию.

→ Ссылка