Ctrl K

Ящики через мостик

Сложная
На правом берегу реки стоит старый склад с crates ящиками, их нужно перенести на новый склад на левом берегу. Берега соединяет узкий мостик: по нему одновременно может идти только один человек. Работают workers грузчиков, вначале все стоят на левом берегу. Для грузчика i известны четыре длительности в минутах: times[i] = [go, pick, back, put]: - go — перейти мостик с левого берега на правый; - pick — взять ящик на правом складе; - back — перенести ящик по мостику на левый берег; - put — поставить ящик на левом складе. Грузчик i считается медленнее грузчика j, если go + back у него больше, а при равных суммах — если i > j. Когда мостик свободен, на него выходит: - самый медленный из тех, кто ждёт на правом берегу с уже взятым ящиком; - если таких нет, — самый медленный из ждущих на левом берегу, но только если на правом складе остались ящики, за которыми ещё никого не отправили. Грузчик, который берёт или ставит ящик, не ждёт у мостика, пока не закончит. Верните минуту, когда последний ящик оказывается на левом берегу (ставить его на склад уже не нужно).
Пример 1
crates=1, workers=2, times=[[2, 1, 2, 1], [1, 1, 1, 1]] → 5

Грузчик 0 медленнее (2 + 2 > 1 + 1), поэтому идёт он: мост с 0 до 2, ящик с 2 до 3, обратно с 3 до 5. Ящик на левом берегу в минуту 5.

Пример 2
crates=2, workers=1, times=[[1, 2, 3, 4]] → 16

Один грузчик ходит дважды: 0–1 туда, 1–3 берёт, 3–6 обратно, 6–10 ставит, 10–11 туда, 11–13 берёт, 13–16 обратно. Второй ящик ставить уже не нужно.

Пример 3
crates=2, workers=2, times=[[3, 1, 3, 1], [1, 1, 1, 1]] → 8

Грузчик 0 идёт первым (0–3), за вторым ящиком на мост выходит грузчик 1 (3–4). В минуту 4 грузчик 0 уже взял ящик и возвращается (4–7), затем возвращается грузчик 1 (7–8).

Ограничения
  • 1 ≤ crates, workers ≤ 10⁴
  • len(times) = workers, len(times[i]) = 4
  • 1 ≤ go, pick, back, put ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамая загруженная переговорка СложнаяУсиливаем наименьшее k раз СложнаяХватит ли мест в шаттле СредняяНесведённые заявки на бирже СредняяРазобрать стопки поровну Лёгкая
загружаем Python…
Вход
crates=1, workers=2, times=[[2, 1, 2, 1], [1, 1, 1, 1]]
Ожидается
5

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