Ctrl K

Наполнить мешок доверху

Средняя
Торговец набирает в мешок специи. Специя i описана парой goods[i] = [price, weight]: вся её партия весит weight кг и стоит price. Любую партию можно разделить в любой пропорции — часть весом x кг стоит price · x / weight. Мешок вмещает ровно capacity кг, и заполнить его нужно доверху. Верните наибольшую возможную стоимость содержимого мешка или -1, если заполнить его доверху нельзя. Ответ принимается с точностью до 10⁻⁵.
Пример 1
goods=[[12, 3], [10, 5], [3, 3]], capacity=6 → 18.0

Самая дорогая на килограмм — первая специя (4 за кг), берём её целиком: 3 кг, 12. Затем вторая (2 за кг): ещё 3 кг из 5, это 6. Итого 18.

Пример 2
goods=[[7, 2], [5, 1]], capacity=4 → -1

Всего товара 3 кг, мешок на 4 кг доверху не заполнить — ответ -1.

Пример 3
goods=[[9, 4]], capacity=1 → 2.25
Ограничения
  • 1 ≤ len(goods) ≤ 10⁵
  • goods[i] = [price, weight], 1 ≤ price, weight ≤ 10⁴
  • 1 ≤ capacity ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамое большое число из кусков СредняяСтудии для записи СредняяНизко — высоко — низко СредняяСтрого низко — высоко СредняяОтменить как можно меньше встреч Средняя
загружаем Python…
Вход
goods=[[12, 3], [10, 5], [3, 3]], capacity=6
Ожидается
18.0

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