Задания
Версия для печати и копирования в MS Word
Тип 26 № 84688
i

В вы­со­ко­тех­но­ло­гич­ном цен­тре ки­бер­без­опас­но­сти круг­лые сутки ра­бо­та­ют ав­то­ма­ти­че­ские си­сте­мы ана­ли­за тра­фи­ка. Каж­дое ска­ни­ро­ва­ние сети имеет время за­пус­ка и за­вер­ше­ния (в мил­ли­се­кун­дах от на­ча­ла суток). Счи­та­ет­ся, что в мо­мент за­пус­ка и в мо­мент за­вер­ше­ния ска­ни­ро­ва­ние всё ещё ак­тив­но.

Не­об­хо­ди­мо про­ана­ли­зи­ро­вать ра­бо­ту цен­тра за сутки и опре­де­лить ин­тер­ва­лы (не­пре­рыв­ные про­ме­жут­ки вре­ме­ни), когда не вы­пол­ня­лось ни одно ска­ни­ро­ва­ние сети.

Вход­ные дан­ные:

За­да­ние 26

В пер­вой стро­ке ука­за­но на­ту­раль­ное число N  левая круг­лая скоб­ка N мень­ше 100 000 пра­вая круг­лая скоб­ка   — ко­ли­че­ство ска­ни­ро­ва­ний за сутки.

Сле­ду­ю­щие N строк со­дер­жат пары чисел: время на­ча­ла и время окон­ча­ния каж­до­го ска­ни­ро­ва­ния (не­от­ри­ца­тель­ные числа, мень­шие 86 400 000).

За­пи­ши­те в от­ве­те два на­ту­раль­ных числа: сна­ча­ла най­ден­ное ко­ли­че­ство пе­ри­о­дов, когда ни одно ска­ни­ро­ва­ние не про­во­ди­лось, а затем их сум­мар­ную дли­тель­ность (в мс).

Ти­по­вой при­мер ор­га­ни­за­ции дан­ных во вход­ном файле:

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())

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]))