27.01 Передвижение по магистрали
Ошибка.
Попробуйте повторить позже
У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах, каждый из которых вмещает не более 41 штуки. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории.
Стоимость перевозки биоматериалов равна произведению расстояния от пункта до лаборатории на количество контейнеров с пробирками. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в лабораторию. Лабораторию расположили в одном из пунктов приёма биоматериалов таким образом, что общая стоимость доставки биоматериалов из всех пунктов минимальна.
Определите минимальную общую стоимость доставки биоматериалов из всех пунктов приёма в лабораторию.
Входные данные: Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число – количество пунктов приёма биоматериалов. В каждой из следующих N строк находится два числа: номер пункта и количество пробирок в этом пункте (все числа натуральные, количество пробирок в каждом пункте не превышает 1000).
Пункты перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки.
В ответе укажите два числа через пробел: сначала значение искомой величины для файла A, затем – для файла B.
f = open(’27B.txt’) # Открываем нужный файл n = int(f.readline()) points = [] all_count = 0 for i in range(n): # Считываем номер пункта и количество пробирок num, cnt = list(map(int, f.readline().split())) # Считаем количество контейнеров cnt = (cnt // 41) + int(cnt % 41 != 0) all_count += cnt points.append([num, cnt]) # Полная стоимость относительно пункта по индексу 0 sm = 0 for i in range(n): # Умножаем кол-во контейнеров пункта по индексу i на расстояние до пункта по индексу 0 sm += (points[i][0] - points[0][0]) * points[i][1] left_count = 0 min_cost = sm for i in range(1, n): # При перемещении на пункт вправее к сумме контейнеров прошлых пункта # добавляется контейнеры пункта points[i - 1] left_count += points[i - 1][1] # Считаем изменение расстояния r = points[i][0] - points[i - 1][0] # Рассчёт новой суммы, после увеличения суммы левой суммой и уменьшения правой суммой sm = sm + left_count * r - (all_count - left_count) * r min_cost = min(min_cost, sm) print(min_cost)
Специальные программы
Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!
Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.
Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.
Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».
Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!
Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!