Тема 26. Обработка целочисленной информации с использованием сортировки
26.05 Билеты
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#63987

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

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

Входные данные. В первой строке файла задано три числа: 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)

Ответ: 499 1594

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!