24 теста из 25 проходят. 1 не проходит по времени (3 секунды). Как ускорить программу?
В этой задаче от вас потребуется написать программу для составления расписания сеансов связи со спутником. Каждый сеанс заключается в обмене короткими сообщениями, поэтому мы считаем, что он происходит мгновенно. Поскольку ресурсы оборудования ограничены, следует стремиться к минимизации количества сеансов. Вместе с тем, интервал времени между сеансами не должен превышать d миллисекунд. Кроме того, существуют промежутки времени, в течении которых связь невозможна. При этом на границах промежутка мгновенный сеанс связи возможен. Расписание составляется на t миллисекунд. Первый сеанс должен обязательно состояться в момент 0, а последний — в момент t.
В первой строке через пробел записаны три натуральных числа a, d и t — количество интервалов недоступности связи, максимальный интервал между между сеансами и время, на которое составляется расписание. Далее в a строках заданы по два целых неотрицательных числа n и k — начало и конец каждого интервала недоступности связи.
Пример ввода:
3 20 100
5 25
27 40
75 90
Пример вывода:
8
Мой код:
a, d, t = map(int, input().split())
kol = 0
mil = 0
for i in range(a):
n, k = map(int, input().split())
while mil <= n:
kol += 1
mil += d
if mil >= k:
continue
else:
kol += 1
mil = n + d
while mil < t:
kol += 1
mil += d
kol += 1
print(kol)
Ответы (1 шт):
зачем вы делаете циклы?
while mil < t:
kol += 1
mil += d
когда это делается в 1 деление:
kol += 1 if t < mil else (1 + (t - mil) // d)
mil += 0 if t < mil else d * ((t - mil) // d)
это же быстрее
и в коде выше тоже самое
P.S.
правильность логики я не смотрел, только отмечаю, что не надо гонять циклы там где им не место