Тема 26. Обработка целочисленной информации с использованием сортировки

26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)

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

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

Задача 1#61578

Задание выполняется с использованием прилагаемых файлов.

В аэропорту расположены камеры хранения, состоящие из K  ячеек. Ячейки камер хранения пронумерованы, начиная с 1  . Пассажиры сдают багаж в эти ячейки. Багаж кладётся в свободную ячейку с минимальным номером. Известно время размещения багажа в камеру хранения и время освобождения ячейки в камере хранения (в минутах с начала суток). Багаж достаётся из ячейки в течение минуты. Начиная со следующей минуты, в ячейку можно положить другой багаж. Если все ячейки заняты, то багаж сдать нельзя.

Входные данные:

В первой строке подается K  — число ячеек в камере хранения и N  — число пассажиров. На каждой из следующих N  строк записаны 2  числа: время размещения багажа в камере хранения и время освобождения ячейки в камере хранения.

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

Выходные данные:

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

24 4

30 60

110 120

1000 2000

115 133

Для указанных входных данных ответом будет 4 1

Вложения к задаче
Показать ответ и решение

Решение (Python)

f = open("26-2__2yr4z.txt")
# Считываем количество ячеек в камере хранения (K) и количество пассажиров (N)
k, n = map(int, f.readline().split())
# Создаем список для хранения времени сдачи и выдачи багажа каждого пассажира
# и считываем эти данные из файла, разделяя каждую строку на два числа
a = []
for i in range(n):
    start, finish = map(int, f.readline().split())
    a.append((start, finish))
# Инициализируем переменные для подсчета количества сданных багажей
# и для хранения номера последней занятой ячей
counter = 0
m = -1
# Создаем список для хранения состояния каждой ячейки (занята/свободна)
storage = [-1] * k
# Сортируем список пассажиров по времени сдачи багажа
a.sort()
# Проходим по каждому пассажиру
for i in range(n):
    start = a[i][0]
    finish = a[i][1]
    # Проходим по каждой ячейке в камере хранения
    for j in range(k):
        # Если время сдачи багажа текущего пассажира больше времени освобождения ячейки
        if start > storage[j]:
            # Занимаем текущую ячейку багажом пассажира
            storage[j] = finish
            # Увеличиваем счетчик сданных багажей
            counter += 1
            # Обновляем номер последней занятой ячейки
            m = j + 1
            # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру
            break
# Выводим количество сданных багажей и номер последней занятой ячейки
print(counter, m)

 

Ответ: 5894 119

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

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

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

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

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

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

Бесплатное онлайн-обучение

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

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

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

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

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

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

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

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