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

Ин­фор­ма­ци­он­ная си­сте­ма вы­пол­ня­ет слож­ные за­про­сы. Для ана­ли­за на­груз­ки си­сте­мы и её ко­ле­ба­ний в те­че­ние суток в про­то­кол за­нес­ли все за­про­сы, вы­пол­нен­ные в те­че­ние од­но­го ка­лен­дар­но­го дня. Для каж­до­го за­про­са ука­за­ны время на­ча­ла и время конца об­ра­бот­ки.

За­да­ние 26

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

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N (N ≤ 1 000 000)  — общее ко­ли­че­ство за­про­сов. Каж­дая из сле­ду­ю­щих N строк опи­сы­ва­ет один за­прос и со­дер­жит 2 целых числа: время на­ча­ла об­ра­бот­ки за­про­са t1 и время окон­ча­ния его об­ра­бот­ки t2. Время задаётся в се­кун­дах от на­ча­ла суток.

На­при­мер, если t1  =  10 и t 2  =  15, то об­ра­бот­ка за­про­са на­ча­лась через 10 се­кунд после на­ча­ла суток и за­вер­ши­лась через 15 се­кунд после на­ча­ла суток, то есть дли­лась 5 се­кунд. Га­ран­ти­ру­ет­ся, что об­ра­бот­ка всех за­про­сов на­чи­на­ет­ся и за­кан­чи­ва­ет­ся в пре­де­лах одних суток, то есть 0 ≤ t1 < t2 ≤ 86400.

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

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

 

Ответ:

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

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке Python.

f = open('26.txt')

n = f.readline()

sytki = [0]*86400

start = 8*60*60

end = 14*60*60

zapros = 0

for s in f:

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

for i in range(t1,t2):

sytki[i] += 1

zapros = max(sytki[start:end+1])

time_zapros = sytki.count(zapros)

print(zapros, time_zapros)

 

Ответ: 4984&1.

 

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

f=open('26.txt')

n=int(f.readline())

a=[0]*24*60*60

t1=8*60*60

t2=14*60*60

for i in range (0,n):

x,y = map(int,f.readline().split())

if x<=t1 and y>=t2:

for j in range (t1,t2):

a[j]+=1

elif x<=t1 and y<=t2:

for j in range (t1,y):

a[j]+=1

elif x>=t1 and y>=t2:

for j in range (x,t2):

a[j]+=1

elif x>=t1 and y<=t2:

for j in range (x,y):

a[j]+=1

print(max(a),a.count(max(a)))

 

 

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

_, *a = [list(map(int,s.split())) for s in open('26.txt')]

dic = {}

for t1,t2 in a:

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

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

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

for i in range(1,len(tt)): tt[i][1] += tt[i-1][1]

tt0 = [t for t in tt if 8*3600 <= t[0] <= 14*3600]

mp = max([x[1] for x in tt0])

d = sum([(tt0[i][0]-tt0[i-1][0]) for i in range(1,len(tt0)) if tt0[i-1][1] == mp])

print(mp,d)


Аналоги к заданию № 68259: 68288 Все