Для участников велогонки на каждом километре кольцевой трассы с двусторонним движением установлены пункты питания. Длина кольцевой трассы равна N километров. Нулевой и N-й километры трассы находятся в одной точке. Известно количество комплектов питания в каждом из пунктов на трассе. В каждый пункт комплекты питания доставляет отдельный электрокар. Стоимость доставки питания вычисляется как произведение количества комплектов питания на расстояние от мобильного цеха их подготовки до пункта питания спортсменов на трассе. Мобильный цех подготовки комплектов расположен в одном из пунктов питания на трассе таким образом, что общая стоимость доставки из цеха во все пункты минимальна.
Определите минимальную суммарную стоимость доставки питания для спортсменов из цеха его подготовки в пункты питания на трассе.
Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000) — количество
пунктов питания на кольцевой трассе. В каждой из следующих N строк находится число — количество комплектов питания на пункте (все числа натуральные, количество комплектов питания на каждом пункте не превышает 1000). Числа указаны в порядке расположения пунктов питания спортсменов на трассе, начиная с первого километра.
Типовой пример организации данных во входном файле:
6
8
20
5
13
7
19
При таких исходных данных, если контейнеры установлены на каждом километре автодороги, необходимо открыть центр переработки в пункте 6. В этом случае сумма транспортных затрат составит: 1 · 7 + 0 · 19 + 1 · 8 + 2 · 20 + 3 · 5 + 2 · 13.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Предупреждение: для обработки файла Bне следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Ответ:
Решение. Сначала считаем количество чисел в файле, затем считаем все числа в массив elems. Далее для первого числа, считая его серединой, найдём сумму всех чисел справа от него (rightSum) и сумму всех чисел слева от него (leftSum) (учитываем, что дорога кольцевая). Также при этом найдём общую стоимость доставки питания при условии открытия мобильного цеха в первом пункте (элементе).
Решение на языке Python.
f = open("1_27.txt")
n = int(f.readline())
elems = [int(i) for i in f]
answers = [0 for i in range(n)]
sum = 0
rightSum = leftSum = 0
for i in range(1, n // 2):
sum = sum + elems[i] * i + elems[n - i] * i
rightSum = rightSum + elems[i]
leftSum = leftSum + elems[n - i]
if n % 2 == 0:
sum = sum + elems[n // 2] * (n // 2)
else:
sum = sum + elems[n // 2] * (n // 2) + elems[n - n // 2] * (n // 2)