Ctrl K

Три лучших окна

Сложная
Дан массив sales — выручка магазина по дням, и число width. Нужно выбрать три непересекающихся отрезка подряд идущих дней, каждый длиной ровно width, так чтобы суммарная выручка в них была как можно больше. Верните индексы начал трёх отрезков в порядке возрастания (нумерация с нуля). Если лучших вариантов несколько, верните лексикографически наименьший список начал.
Пример 1
sales=[3, 1, 4, 1, 5, 9, 2, 6], width=2 → [1, 4, 6]

Суммы окон по началам: 4, 5, 5, 6, 14, 11, 8. Лучше всего [1, 4] + [5, 9] + [2, 6] = 5 + 14 + 8 = 27, начала 1, 4 и 6. Начало 2 вместо 1 даёт ту же сумму, но список [1, 4, 6] меньше.

Пример 2
sales=[2, 2, 2, 2, 2, 2, 2], width=2 → [0, 2, 4]

Все тройки окон дают сумму 12; берём самую левую: [0, 2, 4].

Пример 3
sales=[7, 1, 8], width=1 → [0, 1, 2]
Ограничения
  • 1 ≤ len(sales) ≤ 2·10⁴
  • 1 ≤ sales[i] < 2¹⁶
  • 1 ≤ width ≤ ⌊len(sales) / 3⌋
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВода между стенами СложнаяСамый большой горящий блок СложнаяПрибыль за две сделки СложнаяВсе способы расставить пробелы СложнаяПереход через пещеру Сложная
загружаем Python…
Вход
sales=[3, 1, 4, 1, 5, 9, 2, 6], width=2
Ожидается
[1, 4, 6]

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