Оптимизировать код для задачи "Игра в чётные/нечётные числа"
Ограничение времени: 1 секунда
Ограничение памяти: 256Mb
Ввод: стандартный ввод или input.txt
Вывод: стандартный вывод или output.txt
Вы с другом играете в очень интересную игру, которая заключается в следующем: Также задано целое неотрицательное число
n
. Порядок действий такой:
- Если число
n
чётное, то вы можете поделить его на два или отнять 1.- Если же оно нечётное, то вы только можете отнять 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 шт):
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):
Заинлайни её - нет смысла вызывать функцию.