В клининговой компании есть N пунктов приёма собранного мусора после уборки. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество мусора, которое ежедневно принимают в каждом из пунктов. Мусор перевозят в специальных транспортировочных контейнерах вместимостью V . Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в пункте сбора мусора. Компания планирует открыть пункт переработки мусора в одном из пунктов. Стоимость перевозки мусора равна произведению расстояния от пункта до лаборатории на количество контейнеров с мусором в квадрате. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в пункт переработки.
Пункт переработки расположили в одном из пунктов приёма мусора таким образом, что общая стоимость доставки мусора из всех пунктов минимальна. Определите минимальную общую стоимость доставки мусора из всех пунктов приёма в пункт переработки.
Входные данные:
Даны два входных файла – A и B, каждый из которых содержит в первой строке число N – количество пунктов приёма мусора, и число V
– вместимость транспортировочного контейнера. Каждая из следующих N строк содержит два натуральных числа: номер пункта и количество мусора (не превышающее 7000). Пункты перечислены в произвольном порядке.
В ответе укажите два числа через пробел: сначала искомое значение для файла А, затем для файла B.
f = open(’27B.txt’)
n, v = map(int, f.readline().split())
a = [list(map(int, f.readline().split())) for _ in range(n)]
a = [[s, k // v + (1 if k % v != 0 else 0)] for s, k in a]
a.sort()
bags = [a[0][1]**2]
for i in range(1, n):
bags.append(bags[-1] + a[i][1]**2)
total_cost = sum(abs(a[0][0] - a[j][0]) * a[j][1] ** 2 for j in range(n))
min_sum = total_cost
for i in range(1, n):
diff = a[i][0] - a[i-1][0]
total_cost += diff * bags[i-1] - diff * (bags[n-1] - bags[i-1])
min_sum = min(min_sum, total_cost)
print(min_sum)