Ctrl K

Сплавить два самых лёгких

Средняя
В плавильне лежат слитки с весами weights. Нужно, чтобы каждый слиток весил не меньше floor. За одну операцию берут два самых лёгких слитка x ≤ y, убирают их и вместо них кладут один новый весом 2·x + y. Операция возможна, только пока слитков хотя бы два. Верните наименьшее число операций, после которого все слитки весят не меньше floor.
Пример 1
weights=[1, 6, 2, 9], floor=7 → 2

Сплавляем 1 и 2: 1·2 + 2 = 4, остаётся [6, 4, 9]. Затем 4 и 6: 4·2 + 6 = 14, остаётся [9, 14] — всё не меньше 7.

Пример 2
weights=[8, 12, 7], floor=7 → 0

Все слитки уже не легче 7.

Пример 3
weights=[1, 1, 1], floor=5 → 2

1 и 1 дают 3, остаётся [1, 3]; затем 1·2 + 3 = 5.

Ограничения
  • 2 ≤ len(weights) ≤ 2·10⁵
  • 1 ≤ weights[i] ≤ 10⁹
  • 1 ≤ floor ≤ 10⁹
  • Цель всегда достижима
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиХватит ли мест в шаттле СредняяНесведённые заявки на бирже СредняяНайм с двух концов очереди СредняяВычёркивание с самого маленького СредняяРаунды по максимумам строк Средняя
загружаем Python…
Вход
weights=[1, 6, 2, 9], floor=7
Ожидается
2

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