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

26.08 Составление расписания (конференц залы, аэропорты)

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

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

Задача 1#86044

Входной файл содержит сведения о заявках на проведение мероприятий в конференц-зале. В каждой заявке указаны время начала и время окончания мероприятия (в минутах от начала суток). Если время начала одного мероприятия меньше времени окончания другого, то провести можно только одно из них. Если время окончания одного мероприятия совпадает со временем начала другого, то провести можно оба. Определите, какое максимальное количество мероприятий можно провести в конференц-зале и минимальное возможное суммарное время проведения всех мероприятий.

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

В первой строке входного файла находится натуральное число N — количество заявок на проведение мероприятий (натуральное число, не превыщающее 1000).

Следующие N строк содержат пары чисел, обозначающих время начала и время окончания мероприятия (каждое из чисел натуральное, не превосходящее 1440).

Запишите в ответе два числа через пробел: максимальное количество мероприятий и минимальное суммарное время проведения всех мероприятий.

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

Решение при помощи программы:

f=open(’6_26_conf__3uzor.txt’) #Открываем файл
n=int(f.readline())
requests=[list(map(int,i.split())) for i in f] # считываем и записываем в список все конференции
requests.sort(key = lambda x:(x[1],x[1]-x[0])) # сортируем список конференций для того чтобы мы могли взять наибольшее количество конференций для проведения и при этом сумма их длительностей была как можно меньше
hall=[] # список конференций, которые мы проведём
for start,end in requests: # проход по всем конференциям
    if not hall or start>=hall[-1][1] :
        hall.append([start,end,end-start]) # добавляем конференцию в список, если её начало позже или равно окончанию предыдущей конференции
times=sorted([x for x in requests], key = lambda x:(x[1]-x[0],x[0])) # создаём новый список, в нём будут записаны время проведения конференции по возрастанию их длительности
c=0
for i in times:
    for j in range(0,len(hall)-1):
    # если конференция i длится меньше времени чем конференция из списка hall, и при этом конференцию i можно поставить в расписание при этом не нарушив условие
        if (i[1]-i[0]) < (hall[j][2]) and (hall[j+1][0] >= i[1]) and (i[0] > hall[j][0]):
            hall[j]=[i[0],i[1],i[1]-i[0]] # тогда заменяем конференцию
            break # приостанавлием цикл для того чтобы перейти к следующей конференции i
print(len(hall))
c=sum([i[2] for i in hall])
print(c)


Ответ: 40 731

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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