У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью не более 36 штук. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории.
Стоимость перевозки биоматериалов равна произведению расстояния от пункта до лаборатории на количество контейнеров с пробирками. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в лабораторию. Лабораторию расположили в одном из пунктов приёма биоматериалов таким образом, что общая стоимость доставки биоматериалов из всех пунктов минимальна.
Определите минимальную общую стоимость доставки биоматериалов из всех пунктов приёма в лабораторию.
Входные данные
Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000) – количество пунктов приёма биоматериалов. В каждой из следующих N строк находится два числа: номер пункта и количество пробирок в этом пункте (все числа натуральные, количество пробирок в каждом пункте не превышает 1000).
Пункты перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки.
В ответе укажите два числа: сначала значение искомой величины для файла А, затем – для файла B.
Типовой пример организации данных во входном файле
6
1 100
2 200
5 4
7 3
8 2
10 190
При таких исходных данных и вместимости транспортировочного контейнера, составляющей 96 пробирок, компании выгодно открыть лабораторию в пункте 2. В этом случае сумма транспортных затрат
составит: 1 · 2 + 3 · 1 + 5 · 1 + 6 · 1 + 8 · 2.

Демонстрационный вариант ЕГЭ 2023 г. – задание №27
Решение:
для файла A — Решение на Python — Зайнулин Салават Рифкатович
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
f = open("27/27.36.A.txt") n = int(f.readline()) k = 36 a = list() for i in f.readlines(): x,y = map(int, i.split()) if y % 36 == 0: a.append([x, y // 36]) elif y % 36 != 0: a.append([x, (y // 36) + 1]) min_stoim = list() for i in range(1,n): summ = 0 for j in range(1,n): summ += abs(a[j][0] - a[0][0]) * a[j][1] min_stoim.append(summ) a[0], a[i] = a[i], a[0] print(min(min_stoim)) |
для файла B
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
f = open("27_B.txt") n = int(f.readline()) punkts = [] for s in f: dist, probirki = map(int, s.split()) if probirki % 36 == 0: containers = probirki // 36 else: containers = probirki // 36 + 1 punkts.append([dist, containers]) print(punkts) cost_lab = [] cost = 0 right = 0 left = 0 for i in range(1, n): cost += punkts[i][1] * (punkts[i][0]-punkts[0][0]) right += punkts[i][1] cost_lab.append(cost) for i in range(1, n): left += punkts[i-1][1] cost_lab.append(cost_lab[-1] - right*(punkts[i][0]-punkts[i-1][0])\ + left*(punkts[i][0]-punkts[i-1][0])) right -= punkts[i][1] print(min(cost_lab)) |
Ответ:
51063 (для файла A)
5634689219329 (для файла B)