Задача к ЕГЭ по информатике на тему «Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)» №3

Известно, что путь межрегионального автобуса проходит через А населенных пунктов. У контроллёра есть список, содержащий В заявок на поездку, при этом в каждой заявке указано на какой остановке пассажир будет садиться в автобус и на какой остановке он выйдет. Известно, что в автобусе всего С мест. На остановках сначала происходит высадка пассажиров, затем посадка.

Когда пассажиры приходят на посадку, контроллёр в первую очередь пропускает того, чей путь дольше остальных. При этом место пассажира определеяется как свободное и чей номер минимален.

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

Входные данные. В первой строке файла задано три числа: A (2 ≤ M ≤ 2000) – количество населенных пунктов, в которых останавливается автобус, C (1 ≤ K ≤ 1000) – количество мест в автобусе и B (1 ≤ N ≤ 10000) – количество пассажиров, желающих проехать на автобусе. В каждой из последующих N строк располагаются пары чисел: сначала номер населенного пункта, откуда хочет начать свою поездку пассажир, затем номер населенного пункта, где пассажир собирается сойти с автобуса.

Выходные данные. Два числа: сначала количество пассажиров, которые смогут добраться до нужной им станции, затем количество участков между соседними городами, в которых места будут полностью заняты.

with open(’26_1.txt’) as f:
    m,k,n=map(int, f.readline().split())
    s=[list(map(int, f.readline().split())) for _ in range(n)]
s.sort(key=lambda x: (x[0], -x[1]))
per=[[0]*(m+1) for _ in range(k)]
cnt=0
for st,fn in s:
    for i in range(k):
        if per[i][st]==0:
            cnt+=1
            for j in range(st,fn):
                per[i][j]=1
            break
c_per=0
for p in range(1,m+1):
    if all(per[i][p]==1 for i in range(k)):
        c_per+=1
print(cnt, c_per)

Ответ: 2290 405
Оцените статью
Я решу все!