Войти Регистрация
Алгоритмы

162. Очередь к окнам выдачи на ПВЗ

Средняя

На ПВЗ k окон выдачи с номерами от 0 до k − 1. clients[i] = [arrive, service]: клиент i приходит в минуту arrive, выдача ему занимает service минут. Клиенты даны по неубыванию arrive, при равном времени первым считается тот, кто раньше в списке.

Пришедший клиент идёт в свободное окно с наименьшим номером. Если свободных нет, он ждёт в общей очереди; очередь обслуживается по порядку прихода, и первый в ней занимает окно, которое освободилось раньше всех (при равенстве — с меньшим номером). Окно, освободившееся в минуту t, уже свободно для клиента, пришедшего в t.

Верните список: для каждого клиента — минута, когда он закончит.

В работе: Прогноз очереди на ПВЗ Wildberries в час пик: сколько окон открыть, чтобы ожидание не превышало 10 минут.

Пример 1

Ввод
k = 2
clients = [[0, 5], [1, 3], [2, 4], [4, 1]]
Вывод
[5, 4, 8, 6]

Окна 0 и 1 заняты до 5 и 4. Третий ждёт и берёт окно 1 в 4, четвёртый — окно 0 в 5.

Пример 2

Ввод
k = 1
clients = [[0, 2], [10, 1]]
Вывод
[2, 11]

Второй клиент приходит, когда окно давно свободно.

Ограничения

  • 1 ≤ k ≤ 1000
  • 0 ≤ длина clients ≤ 10⁵
  • 0 ≤ arrive ≤ 10⁹, 1 ≤ service ≤ 10⁴
  • Лимит — 2 с на тест (2000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def queue_finish(k, clients):
СимуляцияКучаОчередьцельO(n log n)

Источник: наша задача на данных Wildberries. Условие пересказано своими словами.