26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)
Ошибка.
Попробуйте повторить позже
В городе открылось кафе. В нем есть К столиков. После каждого клиента столик необходимо убрать, на это уходит 8 минут. Уборка начинается в следующую минуту после того, как уходит гость. Новый клиент может сесть в следующую минуту после завершения уборки. Кафе работает с 7:00 и закрывается в 23:00. Все клиенты должны уйти не позже 23:00. За это время в него приходит N клиентов. (Гарантируется, что они придут не раньше 7:00, а планируют уйти не позже 23:00).
Каждого гостя при входе встречает администратор и подбирает для него стол с минимальным номером. Может случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает столик для того, кто планирует сидеть меньшее время. В случае если все столы заняты, гость готов подождать не более 25 минут, при этом за столом он пробудет обязательно T минут (T – разница между временем прибытия и отбытия), в этом случае выбирается столик, который освободится раньше всего. Если таких несколько, выбирается с меньшим номером.
Определите, сколько клиентов получится обслужить за время работы кафе и номер столика, за который сядет последний клиент. В ответ запишите числа через пробел.
Входные данные. На первой строке одно число N – количество гостей, пришедших за день. На второй строке одно число K – количество столиков в кафе. Далее N строк, в каждой из которых указано время, когда клиент пришел и время, до которого он планировал пробыть в кафе (время дано в минутах от начала дня).
Решение (Python)
f=open(’26_15__1vn9n.txt’) n=int(f.readline()) k=int(f.readline()) clients = [] # список клиентов for line in f.readlines(): a,b=map(int, line.split()) clients.append([a,b]) clients.sort() # сортируем список клиентов table = [-1]*k # список, симулирующий каждое рабочее место, в котором будет записано время, в которое освободится каждое место ans1=0 ans2=0 for client in clients: # проход по каждому клиенту ok = False # флаг, которые показывает нужно ли человеку ждать или нет for i in range(k): # проход по всем рабочим местам в салоне # если время прихода текущего клиента больше чем время освобождения данного места другим клиентом и при этом текущий клиент уйдёт ранее закрытия магазина и придёт позже или во время открытия if client[0]>table[i] and client[0] >= 420 and client[1] <= 1380: table[i]=client[1]+8 # записываем время ухода текущего клиента с учётом уборки данного места после него ok = True # помечаем, что для текущего клиента нашли место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2=i+1 # запоминаем номер места, куда сел последний клиент break # прерываем цикл - переходим к следующему клиенту if not ok: # если клиенту нужно подождать mt=min(table) # определяем индекс данного места в списке mintime=mt-client[0]+1 # считаем время T if mintime<=25: # если время ожидания не более 25 минут ind=table.index(mt) # определяем индекс данного места в списке T=client[1]-client[0] # считаем время T if table[ind]+1+T<=1380: # если данный клиент уйдёт не позже закрытия table[ind]+=1+T+8 # то сажаем данного человека за место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2=ind+1 # запоминаем номер места, куда сел последний клиент print(ans1,ans2)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!