Ошибка.
Попробуйте повторить позже
Известно, что путь автобуса проходит через А городов. У контроллёра есть список, содержащий В заявок на поездку. В каждой заявке указано на какой остановке пассажир будет садиться в автобус и на какой остановке он выйдет. Известно, что в автобусе всего С мест. На остановках сначала происходит высадка пассажиров, затем посадка. Когда пассажиры приходят на посадку, контроллёр в первую очередь пропускает того, чей путь дольше остальных. При этом место пассажира определеяется как свободное и чей номер минимален.
Определите количество пассажиров, которые смогут добраться до пункта своего назначения и в скольких участках между соседними городами будут полностью заняты места.
Входные данные. В первой строке файла задано три числа: A (2 M 2000) – количество населенных пунктов, в которых останавливается автобус, C (1 K 1000) – количество мест в автобусе и B (1 N 10000) – количество пассажиров, желающих проехать на автобусе. В каждой из последующих N строк располагаются пары чисел: сначала номер населенного пункта, откуда хочет начать свою поездку пассажир, затем номер населенного пункта, где пассажир собирается сойти с поезда.
Выходные данные. Два числа через пробел: сначала количество участков между соседними городами, в которых места будут полностью заняты, затем количество пассажиров, которые смогут добраться до нужной им станции,
f = open(’5prob/26.txt’) # Считали первую строку a, c, b = map(int, f.readline().split()) # Считали данные о пассажирах data = [] for i in range(b): x, y = map(int, f.readline().split()) data.append([x, y]) data.sort(key=lambda x: (x[0], -x[1])) # Отсортировали по возрастанию первого элемента и убыванию второго # Создали список для каждого из мест. places[i][point] отвечает за i-ое место и будет хранить 0 или 1, в зависимости # от того, занято ли оно в населенном пункте point. places = [[0] * (a + 1) for i in range(c)] counter = 0 # Количество пассажиров, которые смогут добраться до нужной им станции cnt_areas = 0 # Количество участков между соседними городами, в которых места будут полностью заняты # Перебираем для каждого пассажира места и ищем свободные for st, fin in data: for i in range(c): # Если место свободно на данном населённом пункте, то сажаем сюда пассажира if places[i][st] == 0: counter += 1 # Резервируем данное место на все населённые пункты с st по fin не включительно. То есть место будет свободно # в населённом пункте с индексом fin, так как пассажир на нём сойдёт. for j in range(st, fin): places[i][j] = 1; break # Перебираем для каждого населённого пункта все места и смотрим, чтобы все эти места были заполнены for p in range(1, a + 1): if all(places[i][p] == 1 for i in range(c)): cnt_areas += 1 print(cnt_areas, counter)
Специальные программы
Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!
Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.
Бесплатное обучение
в Школково
Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.
Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».
Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!
Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!