Ctrl K

Ровные куски заданной ширины

Сложная
Дан массив целых чисел values и два числа width и count. За одну операцию можно увеличить или уменьшить любой элемент массива на 1. Нужно добиться, чтобы в массиве нашлись хотя бы count **непересекающихся** отрезков из ровно width подряд идущих элементов, в каждом из которых все элементы равны между собой. Значения в разных отрезках могут отличаться. Верните наименьшее число операций, которого для этого достаточно.
Пример 1
values=[4, 10, 6, 5, 0, 2, 2, 9], width=2, count=2 → 1

Берём кусок [6, 5] (позиции 2–3) и делаем из него [5, 5] за 1 операцию, а кусок [2, 2] (позиции 5–6) уже ровный. Итого 1.

Пример 2
values=[1, 7, 3, 3, 8], width=3, count=1 → 4

Лучший кусок — [7, 3, 3]: опускаем 7 до 3 за 4 операции. Кусок [3, 3, 8] обошёлся бы в 5, а [1, 7, 3] — в 6.

Пример 3
values=[-2, 2, -2, 2], width=2, count=2 → 8

Куски не пересекаются, поэтому придётся взять [-2, 2] и [-2, 2]; каждый выравнивается за 4 операции, итого 8.

Ограничения
  • 2 ≤ values.length ≤ 10⁵
  • -10⁶ ≤ values[i] ≤ 10⁶
  • 2 ≤ width ≤ values.length
  • 1 ≤ count ≤ 15
  • 2 ≤ width · count ≤ values.length
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
загружаем Python…
Вход
values=[4, 10, 6, 5, 0, 2, 2, 9], width=2, count=2
Ожидается
1

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