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 шт):

Автор решения: Zhihar

зачем вы делаете циклы?

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.

правильность логики я не смотрел, только отмечаю, что не надо гонять циклы там где им не место

→ Ссылка