Ctrl K

Рейсы парома со склада

Сложная
Паром развозит ящики со склада по портам. Ящики стоят в очереди crates, где crates[i] = [порт, вес]; порты пронумерованы от 1 до ports. За один рейс паром может взять не больше max_crates ящиков общим весом не больше max_load. Рейс устроен так: - паром забирает несколько **следующих по очереди** ящиков (менять порядок нельзя); - развозит их строго в порядке погрузки: если следующий ящик едет в другой порт, паром плывёт туда — это один переход; если в тот же, где он уже стоит, — ящик выгружается без перехода; - возвращается на склад — ещё один переход. После доставки всех ящиков паром должен стоять на складе. Верните наименьшее общее число переходов.
Пример 1
crates=[[2, 3], [2, 1], [1, 2], [2, 2]], ports=2, max_crates=4, max_load=5 → 5

Первый рейс: ящики 0 и 1 (вес 4) — в порт 2 и назад, 2 перехода. Второй: ящики 2 и 3 (вес 4) — в порт 1, затем в порт 2 и назад, 3 перехода. Всего 5. Взять три первых ящика нельзя: вес 6 больше 5.

Пример 2
crates=[[1, 1], [1, 1], [1, 1]], ports=3, max_crates=2, max_load=10 → 4

Все ящики в порт 1, но за раз помещается только два: два рейса по 2 перехода, итого 4.

Ограничения
  • 1 ≤ len(crates) ≤ 10⁵
  • 1 ≤ ports, max_crates, max_load ≤ 10⁵
  • 1 ≤ порт ящика ≤ ports
  • 1 ≤ вес ящика ≤ max_load
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиТёмный промежуток между фонарями СложнаяКороткий отрезок с нужной суммой СложнаяНаибольшая сумма с короткими прыжками СложнаяСамая длинная серия станков в бюджет СложнаяРастущая цепочка мелкими шагами Сложная
загружаем Python…
Вход
crates=[[2, 3], [2, 1], [1, 2], [2, 2]], ports=2, max_crates=4, max_load=5
Ожидается
5

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