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

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

Опре­де­ли­те, какое мак­си­маль­ное ко­ли­че­ство ме­ро­при­я­тий можно про­ве­сти в кон­фе­ренц-зале и каков при этом мак­си­маль­но воз­мож­ный пе­ре­рыв между двумя по­след­ни­ми ме­ро­при­я­ти­я­ми.

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

За­да­ние 26

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

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

При­мер вход­но­го файла:

5

10 150

100 120

131 170

150 180

120 130

При таких ис­ход­ных дан­ных можно про­ве­сти мак­си­мум три ме­ро­при­я­тия, на­при­мер, ме­ро­при­я­тия по за­яв­кам 2, 3 и 5. мак­си­маль­ный пе­ре­рыв между двумя по­след­ни­ми ме­ро­при­я­ти­я­ми со­ста­вит 20 мин., если со­сто­ят­ся ме­ро­при­я­тия по за­яв­кам 2, 4 и 5.

 

Ответ:

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

Ре­ше­ние.

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

f = open('0.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

del count[-1]

z=count[-1][0]

for i in range (last, n):

if z==0:

z=a[i][0]

count.append(a[i])

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

count.append(a[i])

print(len(count), count[-1][1] - count[-2][0])

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

 

Ответ: 32  15.

 

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

 

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

data = open('26_2024.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)

selectedLastTime = selectedTimes[-1]

for time in times:

if selectedLastTime[1] <= time[0]:

selectedLastTime = time

print(len(selectedTimes), selectedLastTime[0]-selectedTimes[-2][1])

 

При­ведём ре­ше­ние Ев­ге­ния Со­ко­ло­ва на языке Python.

f = open('26_2024.txt')

f.readline()

a = [list(map(int, s.split())) for s in f]

f.close()

b = []

while len(a) > 0:

a.sort(key = lambda e: e[1])

b.append(a[0])

fin = a[0][1]

a = list(filter(lambda e: e[0] >= fin, a))

print(len(b))

print(b[len(b)-1][0] - b[len(b)-2][1])

 

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

a = sorted([list(map(int,s.split())) for s in open('26_2024.txt')][1:],key=lambda x: x[1])

b = [a[0]]

while True:

c = [x for x in a if x[0]>=b[-1][1]]

if len(c)==0: break

else: b.append(c[0])

print(len(b),max(x[0]-b[-2][1] for x in a))


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

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2024 по ин­фор­ма­ти­ке