В высокотехнологичном центре кибербезопасности круглые сутки работают автоматические системы анализа трафика. Каждое сканирование сети имеет время запуска и завершения (в миллисекундах от начала суток). Считается, что в момент запуска и в момент завершения сканирование всё ещё активно.
Необходимо проанализировать работу центра за сутки и определить интервалы (непрерывные промежутки времени), когда не выполнялось ни одно сканирование сети.
Входные данные:
В первой строке указано натуральное —
Следующие N строк содержат пары чисел: время начала и время окончания каждого сканирования (неотрицательные числа, меньшие 86 400 000).
Запишите в ответе два натуральных числа: сначала найденное количество периодов, когда ни одно сканирование не проводилось, а затем их суммарную длительность (в мс).
Типовой пример организации данных во входном файле:
5
При таких исходных данных и длительности работы центра в 500 мс было 4 периода без сканирования: с 0 до 10 мс, с 120 до 130 мс, с 200 до 250 мс и с 400 до 500 мс. Их суммарная длительность равна
Ответ для
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Ответ:
Приведём решение на языке Python.
f = open('26.txt')
n = int(f.readline())
end_time = 86400000
time = sorted([int(i) for i in s.split()] for s in f)
time.append([end_time,end_time])
end = 0
time_no_activity =[]
for sec in time:
if end >= sec[0]:
end = max(end, sec[1])
else:
time_no_activity.append(sec[0]-end)
end = sec[1]
print(len(time_no_activity), sum (time_no_activity))
Ответ: 360 376359.
Приведём решение Юрия Красильникова на языке Python.
a = sorted([list(map(int,s.split())) for s in open('26.txt')][1:])
otr = [a[0]] # отрезки времени, в которых выполняется сканирование
for x in a[1:]:
if otr[-1][1]+1 >= x[0]: otr[-1][1] = max(otr[-1][1],x[1])
else: otr.append(x)
print(len(otr)+1,24*60*60*1000-sum([x[1]-x[0] for x in otr]))

