Ctrl K

Найм с двух концов очереди

Средняя
На склад выстроилась очередь соискателей; wages[i] — сколько просит человек, стоящий i-м. Нужно нанять ровно hires человек, по одному за раунд. В каждом раунде менеджер смотрит только на первых window человек очереди и на последних window человек (если людей осталось меньше 2 · window, он видит всех). Из тех, кого он видит, нанимается тот, кто просит меньше всех; при равенстве — тот, кто стоял в исходной очереди раньше. Нанятый уходит из очереди, и остальные смыкаются. Верните суммарную стоимость найма.
Пример 1
wages=[5, 9, 4, 8, 6, 3, 7], hires=3, window=2 → 12

Сначала смотрим на [5, 9] и [3, 7] — берём 3. Затем на [5, 9] и [6, 7] — берём 5. Затем на [9, 4] и [6, 7] — берём 4. Итого 3 + 5 + 4 = 12. Восьмёрку из середины так и не увидели.

Пример 2
wages=[2, 6, 2, 6], hires=3, window=3 → 10

Окна перекрываются, так что выбираем из всех: 2 + 2 + 6 = 10.

Пример 3
wages=[4, 1, 1, 4], hires=1, window=1 → 4
Ограничения
  • 1 ≤ len(wages) ≤ 10⁵
  • 1 ≤ wages[i] ≤ 10⁵
  • 1 ≤ hires ≤ len(wages)
  • 1 ≤ window ≤ len(wages)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСтудии для записи Средняяk ближайших значений СредняяТри в ряд до упора СредняяДроби из простых чисел СредняяХватит ли мест в шаттле Средняя
загружаем Python…
Вход
wages=[5, 9, 4, 8, 6, 3, 7], hires=3, window=2
Ожидается
12

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