Ctrl K

Бой с наименьшими потерями

Сложная
Герой сражается с n монстрами. Монстр i наносит герою attack[i] урона каждую секунду, пока жив, и у него toughness[i] очков здоровья. Каждая секунда проходит так: сначала все живые монстры бьют героя, затем герой выбирает одного живого монстра и снимает ему strike очков здоровья. Монстр погибает, когда его здоровье опускается до нуля или ниже. Верните наименьший суммарный урон, который получит герой, пока не погибнут все монстры.
Пример 1
strike=3, attack=[2, 5], toughness=[3, 7] → 22

Первого монстра хватит одного удара, второму нужно три. Если начать с первого, герой получит 7 урона за первую секунду и по 5 за следующие три: 7 + 15 = 22. В обратном порядке вышло бы 7·3 + 2 = 23.

Пример 2
strike=10, attack=[4], toughness=[25] → 12

Монстру нужно три удара, и все три секунды он бьёт героя на 4: итого 12.

Пример 3
strike=2, attack=[1, 3, 2], toughness=[4, 2, 6] → 17
Ограничения
  • 1 ≤ strike ≤ 10⁴
  • 1 ≤ n = len(attack) = len(toughness) ≤ 10⁵
  • 1 ≤ attack[i], toughness[i] ≤ 10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиНаращиваем капитал проектами СложнаяРазличимые сокращения слов СложнаяБольше заказов к сроку СложнаяСамый узкий отрезок для всех списков СложнаяПо две отметки на отрезок Сложная
загружаем Python…
Вход
strike=3, attack=[2, 5], toughness=[3, 7]
Ожидается
22

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