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

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

За­да­ние 26

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

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

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

За­пи­ши­те в от­ве­те два числа: мак­си­маль­ное  — ко­ли­че­ство ме­ро­при­я­тий и самый длин­ный пе­ре­рыв между двумя по­след­ни­ми ме­ро­при­я­ти­я­ми (в ми­ну­тах).

 

Ответ:

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

Ре­ше­ние.

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

f = open('26.txt')

n = int(f.readline())

a=[]

for s in f:

start,end=map(int, s.split())

a.append([end, start])

a.sort()

count=[]

z=0

for i in range(n):

if z==0:

z=a[i][0]

count.append(a[i])

last=i

elif z<=a[i][1]:

z=a[i][0]

count.append(a[i])

last=i

z = count[-2][0]

maxi = count[-1][1] - count[-2][0]

for i in range(last + 1, n):

if z < a[i][1]:

count[-1] = a[i]

if count[-1][1] - count[-2][0] > maxi:

maxi = count[-1][1] - count[-2][0]

print(len(count), maxi)

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла в усло­вии по­лу­ча­ем ответ  — 17  35.

 

Ответ: 17  35.

 

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

 

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

data = open('26.txt').readlines()[1:]

times = []

for item in data:

time = [int(i) for i in item.split()]

times.append(time)

times.sort(key=lambda x: x[1])

selectedTimes = [times[0]]

for time in times[1:]:

if selectedTimes[-1][1] <= time[0]:

selectedTimes.append(time)

selectedLastElement = selectedTimes[-1]

endingOfThePreLast = selectedTimes[-2][1]

for time in times:

if time[0] > selectedLastElement[0]:

selectedLastElement = time

biggestGapBetweenTwoLastElements = selectedLastElement[0]-endingOfThePreLast

print(len(selectedTimes), biggestGapBetweenTwoLastElements)

 

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

f = open('26.txt')

f.readline()

a, b = [], []

n, k, max1 = 1, 0, 0

for i in f:

a.append(list(map(int,i.split())))

a.sort(key = lambda x: x[1]) # сор­ти­ру­ем по вре­ме­ни за­вер­ше­ния

b1, b0 = a[0][1], 0 # пра­вые гра­ни­цы по­след­них двух кон­фе­ренц­мй

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

if a[i][0] >= b1: # усло­вие того, что кон­фе­рен­ции не пе­ре­се­ка­ют­ся

n += 1 # ко­ли­че­ство ко­фе­рен­ций

b0 = b1

b1 = a[i][1]

k = i # номер по­след­ней кон­фе­рен­ции

for i in range(k, len(a)):

if a[i][0] >= b0:

max1 = max(max1, a[i][0] - b0) # пы­та­ем­ся найти под­хо­дя­щую по­след­нюю кон­фе­рен­цию

print(n, max1)


Аналоги к заданию № 59731: 59819 60268 61406 Все

Источник: ЕГЭ по ин­фор­ма­ти­ке 19.06.2023. Ос­нов­ная волна