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

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

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

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

Задача 1#111403

На вокзале есть N  камер хранения для пассажиров, которые пронумерованы с единицы. Приходя на вокзал, пассажир кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в секундах с начала суток). Камера доступна для багажа начиная со следующей секунды после окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир уходит.

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’26.txt’)
n = int(f.readline())
k = int(f.readline())
a = sorted([list(map(int, i.split())) for i in f])
ch = [[] for i in range(k)] #список с ячейками для хранения багажа
mx_kr_31 = -1
c31 = [0]*31 #подсчет количества пассажиров с различными остатками от деления на 31
for i in a: #перебор пассажиров
    for j in range(k): #проход по ячейкам в поисках свободной
        if (not ch[j]) or (i[0] > ch[j][-1][1]):
            ch[j].append(i) #добавляем багаж в ячейку
            tim = i[1]-i[0] #время хранения багажа
            if tim % 31 == 0:
                if tim >= mx_kr_31:
                    c31[0] = mx_kr_31
                    mx_kr_31 = tim
                elif tim > c31[0]:
                    c31[0] = tim
            elif tim > c31[tim % 31]:
                c31[tim % 31] = tim #подсчитываем это время хранения
            break

mx_ans = c31[0]+mx_kr_31
for i in range(1, 16):
    if c31[i] + c31[31-i] > mx_ans:
        mx_ans = c31[i] + c31[31-i]
print(mx_ans)

Ответ: 168671

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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