В высокотехнологичном центре кибербезопасности круглые сутки работают автоматические системы анализа трафика. Каждое сканирование сети имеет время запуска и завершения (в миллисекундах от начала суток). Считается, что в момент запуска и в момент завершения сканирование всё ещё активно. Необходимо проанализировать работу центра за сутки и определить интервалы (непрерывные промежутки времени), когда не выполнялось ни одно сканирование сети.
Входные данные
В первой строке указано натуральное число \(N\) \((N < 100~000)\) – количество сканирований за сутки.
Следующие \(N\) строк содержат пары чисел: время начала и время окончания каждого сканирования (неотрицательные числа, меньшие \(86400000).\)
Запишите в ответе два натуральных числа: сначала найденное количество периодов, когда ни одно сканирование не проводилось, а затем их суммарную длительность (в мс).
Типовой пример организации данных во входном файле
\(5\)
\(10 \,\, 100\)
\(20 \,\, 120\)
\(130 \,\, 170\)
\(150 \,\, 200\)
\(250 \,\, 400\)
При таких исходных данных и длительности работы центра в \(500\) мс было \(4\) периода без сканирования: с \(0\) до \(10\) мс, с \(120\) до \(130\) мс, с \(200\) до \(250\) мс и с \(400\) до \(500\) мс. Их суммарная длительность равна $$(10 – 0) + (130 – 120) + (250 – 200) + (500 – 400) = 170.$$ Ответ для примера: \(4; \,\, 170.\)
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Решение:
Python
f = open('26.txt')
N = int(f.readline())
ti = [tuple(map(int, line.split())) for line in f]
ti.sort()
te, fin = 0, 86400000
p = 0
q, total = 0, 0
for p in range(N):
if ti[p][0] > te:
q += 1
total += ti[p][0] - te
te = max(te, ti[p][1])
if fin > te:
q += 1
total += fin - te
print(q, total)
Ответ: \(360 \,\, 376359\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене