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

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

За­да­ние 26

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

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

5

10 140

100 10

120 10

131 19

131 49

 

Ответ к при­ме­ру: 3 1.

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

Ре­ше­ние.

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

f = open('26_59776.txt')

n = int(f.readline())

a=[]

for s in f:

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

a.append([start + dlit, 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])

 

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

 

Ответ: 53  1.

 

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

 

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

zajav = sorted([list(map(int,s.split())) for s in open('26_59776.txt').readlines()][1:],key=sum)

rasp = [zajav[0]]

while True:

cand = [x for x in zajav if x[0]>=sum(rasp[-1])]

if len(cand)==0:

break

else:

rasp.append(cand[0])

print(len(rasp),max([x[0]-sum(rasp[-2]) for x in zajav]))

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