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

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

За­да­ние 26

В за­яв­ке ука­за­ны время сдачи ба­га­жа и время осво­бож­де­ния ячей­ки (в ми­ну­тах от на­ча­ла суток). Багаж од­но­го пас­са­жи­ра раз­ме­ща­ет­ся в одной сво­бод­ной ячей­ке с ми­ни­маль­ным но­ме­ром. Ячей­ки про­ну­ме­ро­ва­ны на­чи­ная с еди­ни­цы. Раз­ме­ще­ние ба­га­жа в ячей­ке или её осво­бож­де­ние про­ис­хо­дит в те­че­ние 1 мин. Багаж можно по­ме­стить в толь­ко что осво­бождённую ячей­ку на­чи­ная со сле­ду­ю­щей ми­ну­ты.

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

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

В пер­вой стро­ке вход­но­го файла на­хо­дит­ся на­ту­раль­ное число K, не пре­вы­ша­ю­щее 1000,  — ко­ли­че­ство ячеек в ка­ме­ре хра­не­ния.

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

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

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

2

5

30 60

40 1000

59 60

61 1000

1010 1440

При таких ис­ход­ных дан­ных по­ло­жить вещи в ка­ме­ру хра­не­ния смо­гут пер­вый, вто­рой, четвёртый и пятый пас­са­жи­ры.

По­след­ний пас­са­жир по­ло­жит вещи в ячей­ку 1, так как ячей­ки 1 и 2 будут сво­бод­ны.

Ти­по­вой при­мер имеет ил­лю­стра­тив­ный ха­рак­тер. Для вы­пол­не­ния за­да­ния ис­поль­зуй­те дан­ные из при­ла­га­е­мых фай­лов.

 

Ответ:

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

Ре­ше­ние.

Счи­та­ем файл в мас­сив и от­сор­ти­ру­ем его. Будем по­сле­до­ва­тель­но за­пол­нять каж­дую ячей­ку, про­ве­ряя, чтобы время уклад­ки но­во­го ба­га­жа от­ли­ча­лось от вре­ме­ни за­бо­ра ба­га­жа преды­ду­щим пас­са­жи­ром на 1 и более. Также будем за­по­ми­нать номер по­след­ней ячей­ки, куда был сдан багаж.

 

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

f = open('1_26.txt')

k = int(f.readline())

n = int(f.readline())

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

count = 0

maxt = kposled = 0

for i in range (1, k+1):

start = 0

for x in a:

if x[0]-start >= 1 and x[0] > 0 and x[1] > 0:

count +=1

start = x[1]

if x[0] > maxt:

maxt = x[0]

kposled = i

x[0] = -1

x[1] = -1

print(count, kposled)

 

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

 

Ответ: 344  53.

 

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

 

При­ведём ре­ше­ние Ана­то­лия Чер­ны­ше­ва на языке Python.

def solve(K, passengers):

lockers = [-1]*K

served_passengers = 0

last_locker = -1

for arrival, departure in sorted(passengers):

for i in range(K):

if lockers[i] < arrival:

lockers[i] = departure

served_passengers += 1

last_locker = i + 1

break

return served_passengers, last_locker

f = open('1_26.txt')

K = int(f.readline())

N = int(f.readline())

passengers = []

for _ in range(N):

arrival, departure = map(int, f.readline().split())

passengers.append((arrival, departure))

print(*solve(K, passengers))

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