Задание 27. Информатика. ЕГЭ-2022. 1 вариант

Просмотры: 144
Изменено: 25 ноября 2024

У медицинской компании есть \(N\) пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью не более \(36\) штук. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории. Компания планирует открыть лабораторию в одном из пунктов. Стоимость перевозки биоматериалов равна произведению расстояния от пункта до лаборатории на количество контейнеров с пробирками. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в лабораторию. Лабораторию расположили в одном из пунктов приёма биоматериалов таким образом, что общая стоимость доставки биоматериалов из всех пунктов минимальна.

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

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

Дано два входных файла (файл \(A\) и файл \(B\)), каждый из которых в первой строке содержит число \(N\) (\(1 \leq N \leq 10~000~000\)) – количество пунктов приёма биоматериалов. В каждой из следующих \(N\) строк находится два числа: номер пункта и количество пробирок в этом пункте (все числа натуральные, количество пробирок в каждом пункте не превышает \(1~000\)). Пункты перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки. В ответе укажите два числа: сначала значение искомой величины для файла \(A\), затем – для файла \(B\).

Типовой пример организации данных во входном файле

\(6\)
\(1\)    \(100\)
\(2\)    \(200\)
\(5\)    \(4\)
\(7\)    \(3\)
\(8\)    \(2\)
\(10\)    \(190\)

При таких исходных данных и вместимости транспортировочного контейнера, составляющей \(96\) пробирок, компании выгодно открыть лабораторию в пункте \(2\). В этом случае сумма транспортных затрат составит: \(1 \cdot 2 + 3 \cdot 1 + 5 \cdot 1 + 6 \cdot 1 + 8 \cdot 2 = 32\).

Файл с данными

Решение:

Python


def make_el(x):
    q = 36
    temp = tuple(map(int, x.split()))
    return temp[0], temp[1] // q + bool(temp[1] % q)

file_names = ('27A.txt', '27B.txt')

for file_name in file_names:
    f = open(file_name)
    N = int(f.readline())

    arr = tuple(make_el(st) for st in f.readlines())

    s = 0
    left_sum = arr[0][1]
    right_sum = 0

    for i in range(1, N):
        s += (arr[i][0] - arr[0][0]) * arr[i][1]
        right_sum += arr[i][1]

    min_s = s

    for i in range(1, N):
        s += (arr[i][0] - arr[i-1][0]) * (left_sum - right_sum)
        left_sum += arr[i][1]
        right_sum -= arr[i][1]
        min_s = min(s, min_s)

    print(min_s)

Ответ:
\(51063\)
\(5634689219329\)