crates ящиками, их нужно перенести на новый склад на левом берегу. Берега соединяет узкий мостик: по нему одновременно может идти только один человек. Работают workers грузчиков, вначале все стоят на левом берегу.
Для грузчика i известны четыре длительности в минутах: times[i] = [go, pick, back, put]:
- go — перейти мостик с левого берега на правый;
- pick — взять ящик на правом складе;
- back — перенести ящик по мостику на левый берег;
- put — поставить ящик на левом складе.
Грузчик i считается медленнее грузчика j, если go + back у него больше, а при равных суммах — если i > j.
Когда мостик свободен, на него выходит:
- самый медленный из тех, кто ждёт на правом берегу с уже взятым ящиком;
- если таких нет, — самый медленный из ждущих на левом берегу, но только если на правом складе остались ящики, за которыми ещё никого не отправили.
Грузчик, который берёт или ставит ящик, не ждёт у мостика, пока не закончит. Верните минуту, когда последний ящик оказывается на левом берегу (ставить его на склад уже не нужно).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.
crates=2, workers=1, times=[[1, 2, 3, 4]] → 16
Один грузчик ходит дважды: 0–1 туда, 1–3 берёт, 3–6 обратно, 6–10 ставит, 10–11 туда, 11–13 берёт, 13–16 обратно. Второй ящик ставить уже не нужно.
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).
crates=1, workers=2, times=[[2, 1, 2, 1], [1, 1, 1, 1]]
5
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 100 тестов на сервере, включая скрытые.