Ctrl K

Когда остановить колесо обозрения

Средняя
Вы управляете колесом обозрения. Посадка идёт в одну кабинку у земли, и в неё садятся не больше 4 человек. Каждый поворот колеса стоит spin_cost, каждый севший пассажир платит ticket. Перед поворотом номер i (с нуля) к колесу подходят arrivals[i] новых посетителей и встают в общую очередь. Перед каждым поворотом в кабинку сажают столько ожидающих, сколько поместится (до 4). Повороты делаются и после того, как массив arrivals закончился, пока в очереди кто-то есть. Остановиться можно после любого поворота — например, раньше, чем всех обслужили. Прибыль после k поворотов — это выручка от севших за эти повороты минус k · spin_cost; повороты, которые нужны, чтобы спустить уже севших, бесплатны. Верните наименьшее число поворотов, при котором прибыль наибольшая. Если ни при каком числе поворотов прибыль не становится положительной, верните -1.
Пример 1
arrivals=[6, 1], ticket=3, spin_cost=4 → 2

Поворот 1: пришли 6, садятся 4, прибыль 4 · 3 - 4 = 8. Поворот 2: пришёл 1, садятся 2 ожидающих и он, итого 3, прибыль 8 + 9 - 4 = 13. Очередь пуста; дальше крутить — только терять. Ответ 2.

Пример 2
arrivals=[2, 2], ticket=1, spin_cost=5 → -1

Каждый поворот приносит максимум 2 · 1 = 2 при затратах 5, прибыль всё время отрицательная — ответ -1.

Пример 3
arrivals=[0, 0, 9], ticket=10, spin_cost=7 → 5
Ограничения
  • 1 ≤ len(arrivals) ≤ 10⁵
  • 0 ≤ arrivals[i] ≤ 50
  • 1 ≤ ticket, spin_cost ≤ 100
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЧтение по спирали СредняяКвадрат, пронумерованный по спирали СредняяСледующий шаг колонии клеток СредняяЗигзаг по диагоналям СредняяТри в ряд до упора Средняя
загружаем Python…
Вход
arrivals=[6, 1], ticket=3, spin_cost=4
Ожидается
2

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