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

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

Ме­не­джер ком­па­нии ана­ли­зи­ру­ет дан­ные си­сте­мы на­блю­де­ния за про­шед­шие сутки, и вы­яв­ля­ет не­пе­ре­се­ка­ю­щи­е­ся от­рез­ки вре­ме­ни наи­боль­шей длины, в те­че­ние ко­то­рых число со­труд­ни­ков, на­хо­дя­щих­ся в офисе, не из­ме­ня­лось.

Вход­ной файл со­дер­жит время входа и вы­хо­да каж­до­го со­труд­ни­ка ком­па­нии. Опре­де­ли­те ми­ну­ту, когда в пред­по­след­ний раз за сутки число со­труд­ни­ков по­ме­ня­лось, и ука­жи­те наи­боль­шую длину от­рез­ка вре­ме­ни, когда ко­ли­че­ство со­труд­ни­ков оста­ва­лось не­из­мен­ным.

За­да­ние 26

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

В пер­вой стро­ке вход­но­го файла на­хо­дит­ся на­ту­раль­ное число N (N ≤ 100 000)  — ко­ли­че­ство со­труд­ни­ков ком­па­нии.

Сле­ду­ю­щие N строк со­дер­жат пары чисел, обо­зна­ча­ю­щих со­от­вет­ствен­но время входа и время вы­хо­да со­труд­ни­ка (все числа на­ту­раль­ные, не пре­вы­ша­ю­щие 1440).

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

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

5

10 1070

230 1070

240 1070

1070 1400

1071 1400

При таких ис­ход­ных дан­ных в те­че­ние суток было 7 про­ме­жут­ков вре­ме­ни, когда число со­труд­ни­ков не ме­ня­лось: (0, 10), (10, 230), (230, 240), (240, 070), (1070, 1071), (1071, 1400), (1400, 1440). Наи­боль­шей дли­ной из этих от­рез­ков яв­ля­ет­ся число 830. В 1071 ми­ну­ту в пред­по­след­ний раз за сутки из­ме­ни­лось число со­труд­ни­ков.

Ти­по­вой при­мер имеет ил­лю­стра­тив­ный ха­рак­тер. Для вы­пол­не­ния за­да­ния ис­поль­зуй­те дан­ные из при­ла­га­е­мых фай­лов.

 

Ответ:

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

f=open('26.txt')

f.readline()

times=[0]*1440

for s in f:

t1,t2=map(int, s.split())

for t in range(t1,t2+1): times[t]+=1

dlit=[1]

smena=[]

for i in range(1,len(times)):

if times[i-1]==times[i]: dlit[-1]+=1

else:

dlit.append(1)

smena.append(i)

print(smena[-2],max(dlit))

 

Ответ: 1432; 15.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

f=open('26.txt')

f.readline()

dic={}

for s in f:

t1,t2=map(int, s.split())

dic[t1]=dic.get(t1,0)+1

dic[t2+1]=dic.get(t2+1,0)-1

tt=sorted([t for t in dic if dic[t]!=0])

if tt[0]!=0: tt=[0]+tt

if tt[-1]!=1440: tt=tt+[1440]

print(tt[-3],max([tt[i]-tt[i-1] for i in range(1,len(tt))]))