Ctrl K

Самые загруженные работники в круге

Сложная
Работники с номерами от 0 до workers - 1 стоят по кругу. Каждый одновременно делает не больше одной задачи. Задачи приходят по очереди: задача i (нумерация с нуля) появляется в момент arrivals[i] и занимает durations[i] единиц времени. Массив arrivals строго возрастает. Когда приходит задача i, её распределяют так: - если все работники заняты, задача теряется; - иначе её берёт работник i % workers, если он свободен; - если он занят, проверяются следующие по кругу: i % workers + 1, затем следующий и так далее, после workers - 1 снова идёт 0. Задачу получает первый свободный. Работник, взявший задачу в момент t с длительностью d, снова свободен начиная с момента t + d (и может взять задачу, пришедшую ровно в этот момент). Верните номера всех работников, которые выполнили больше всего задач. Порядок номеров любой.
Пример 1
workers=2, arrivals=[1, 2, 3, 4], durations=[4, 1, 1, 1] → [1]

Задача 0 уходит работнику 0 до момента 5. Задача 1 — работнику 1 (до 3). Задача 2 хочет работника 0, он занят, и по кругу она достаётся работнику 1, который как раз освободился в момент 3. Задача 3 тоже хочет работника 1 и получает его в момент 4. Работник 1 выполнил три задачи, работник 0 — одну.

Пример 2
workers=3, arrivals=[1, 2, 3, 4], durations=[10, 10, 10, 10] → [0, 1, 2]

Первые три задачи разбирают всех работников, четвёртая приходит, когда все заняты, и теряется. У каждого по одной задаче — все трое самые загруженные.

Пример 3
workers=4, arrivals=[1, 3, 5, 7, 9], durations=[1, 1, 1, 1, 1] → [0]

Все свободны, поэтому каждая задача попадает к своему работнику i % 4: задачи 0 и 4 — к работнику 0, у него две задачи.

Ограничения
  • 1 ≤ workers ≤ 10⁵
  • 1 ≤ arrivals.length = durations.length ≤ 10⁵
  • 1 ≤ arrivals[i], durations[i] ≤ 10⁹
  • arrivals строго возрастает
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПополам или вдвое СложнаяКонтур городской застройки СложнаяНаращиваем капитал проектами СложнаяБольше заказов к сроку СложнаяСамый узкий отрезок для всех списков Сложная
загружаем Python…
Вход
workers=2, arrivals=[1, 2, 3, 4], durations=[4, 1, 1, 1]
Ожидается
[1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 173 теста на сервере, включая скрытые.