Задача к ЕГЭ по информатике на тему «Мусорки, кольцевая дорога» №2

В компании по доставке еды есть N ресторанов, расположенных в различных районах города. Все рестораны расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество заказов, которые ежедневно принимаются в каждом ресторане. Заказы доставляются в специальных транспортировочных контейнерах, вмещающих не более 20 заказов. Каждый контейнер упаковывается в ресторане и открывается только при доставке на центральный склад.

Стоимость доставки заказов равна произведению расстояния от ресторана до склада на количество контейнеров с заказами. Общая стоимость перевозки за день равна сумме стоимостей доставок из каждого ресторана на склад. Склад расположен в одном из ресторанов таким образом, что общая стоимость доставки из всех ресторанов минимальна.

Определите минимальную общую стоимость доставки заказов из всех ресторанов в склад.

Входные данные

Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10000000)  – количество ресторанов. В каждой из следующих N строк находится два числа: номер ресторана и количество заказов в этом ресторане (все числа натуральные, количество заказов в каждом ресторане не превышает 1000). Рестораны перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки.

В ответе укажите два числа: сначала значение искомой величины для файла А, затем – для файла B.

f = open(’27B.txt’)
n = int(f.readline())
points = []
costs = [0] * n
right_sum = 0
left_sum = 0

for i in range(n):
    dist, tubes = map(int, f.readline().split())
    points.append([dist, (tubes + 19) // 20])

for i in range(1, n):
    costs[0] += (points[i][0] - points[0][0]) * points[i][1]
    right_sum += points[i][1]

for i in range(1, n):
    left_sum += points[i - 1][1]
    costs[i] = costs[i - 1] - right_sum * (points[i][0] - points[i - 1][0]) + 
    left_sum * (points[i][0] - points[i - 1][0])
    right_sum -= points[i][1]

print(min(costs))

Ответ: 67570 58977930
Оцените статью
Я решу все!