Ctrl K

Наборы с лёгкими крайними

Средняя
На складе лежат предметы, их веса записаны в массиве weights. Нужно выбрать непустой набор предметов (любые позиции массива, без повторов). Набор считается удобным, если вес самого лёгкого предмета в нём плюс вес самого тяжёлого не превышает limit. Если в наборе один предмет, он одновременно и самый лёгкий, и самый тяжёлый. Посчитайте, сколько существует удобных наборов. Наборы, отличающиеся хотя бы одной позицией, считаются разными, даже если веса в них совпадают. Ответ может быть очень большим, поэтому верните его по модулю 10⁹ + 7.
Пример 1
weights=[2, 4, 7], limit=8 → 3

Подходят наборы [2], [4], [2, 4] и [2, 7]: у каждого сумма самого лёгкого и самого тяжёлого не больше 8. А вот [4, 7], [7] и [2, 4, 7] — нет.

Пример 2
weights=[5, 5], limit=10 → 3

Обе пятёрки по отдельности и обе вместе: 5 + 5 = 10. Одинаковые веса на разных позициях считаются разными наборами.

Пример 3
weights=[9, 6], limit=5 → 0

Даже одиночный предмет весом 6 даёт 6 + 6 = 12 > 5, поэтому подходящих наборов нет.

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

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