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

Вход­ной файл со­дер­жит ин­фор­ма­цию о плане про­ве­де­ния со­бра­ний в кон­фе­ренц-⁠зале. Для каж­до­го со­бра­ния из­вест­но время на­ча­ла и окон­ча­ния со­бра­ния.

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

За­да­ние 26

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

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

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

5

10 150

100 110

120 130

131 150

131 180

 

Ответ:

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

Ре­ше­ние.

При­ведём ре­ше­ние Ми­ха­и­ла Куз­не­цо­ва на языке Python.

f = open('26.txt')

n = int(f.readline())

a = []

for s in f:

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

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

t = a[0][1] #время окон­ча­ния по­след­не­го ме­ро­при­я­тия

meet = [a[0]]

for i in range(1, n):

if t <= a[i][0]:

t = a[i][1]

meet.append(a[i])

last_i = i

tp = meet[-1][1] #время окон­ча­ния по­след­не­го ме­ро­при­я­тия

T = meet[-1][1] - meet[-1][0] #дли­тель­ность по­след­не­го ме­ро­при­я­тия

del meet[-1]

t = meet[-1][1] #время окон­ча­ния пред­по­след­не­го ме­ро­при­я­тия

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

if t <= a[i][0]:

if T < a[i][1] - a[i][0]:

T = a[i][1] - a[i][0]

tp = a[i][1]

print(len(meet)+1, tp - meet[0][0])

 

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

 

Ответ: 16  1008.

 

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

 

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

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

rasp = [zajav[0]]

while True:

kand = [z for z in zajav if z[0]>=rasp[-1][1]]

if len(kand) == 0:

break

else:

rasp.append(kand[0])

kand = sorted([z for z in zajav if z[0] >= rasp[-2][1]],key=lambda x: x[1]-x[0])

rasp[-1] = kand[-1]

print(len(rasp),rasp[-1][1]-rasp[0][0])


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

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