Ctrl K

Опустошать наполняющиеся баки

Сложная
Есть n баков: в i-м сейчас levels[i] литров, и каждую секунду в него поступает rates[i] литров. Каждая секунда устроена так: сначала во все баки одновременно поступает вода, затем вы можете выбрать один бак и полностью его опустошить. Верните наименьшее число секунд, после которого суммарный объём воды во всех баках может стать не больше limit, или -1, если этого не добиться никогда. Если сумма уже сейчас не больше limit, ответ 0.
Пример 1
levels=[4, 1, 2], rates=[1, 3, 0], limit=5 → 2

Секунда 1: уровни [5, 4, 2], опустошаем бак 1 — [5, 0, 2], сумма 7. Секунда 2: [6, 3, 2], опустошаем бак 0 — [0, 3, 2], сумма 5. За одну секунду лучшее, что можно получить, — 6.

Пример 2
levels=[2, 2], rates=[5, 5], limit=3 → -1

После каждой секунды хотя бы один бак, не опустошённый в эту секунду, содержит не меньше 5, так что сумма никогда не станет ≤ 3.

Пример 3
levels=[3, 4], rates=[1, 1], limit=10 → 0

Сумма 7 уже не больше 10 — ждать не нужно.

Ограничения
  • 1 ≤ n = len(levels) = len(rates) ≤ 1000
  • 1 ≤ levels[i] ≤ 1000
  • 0 ≤ rates[i] ≤ 1000
  • 0 ≤ limit ≤ 10⁶
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКоробка в коробке СложнаяСтрогий подъём из запасных чисел СложнаяСамый выгодный набор подработок СложнаяСамый длинный спуск прыжками СложнаяНаибольшее число, кратное трём Сложная
загружаем Python…
Вход
levels=[4, 1, 2], rates=[1, 3, 0], limit=5
Ожидается
2

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