На каждом 3-м километре кольцевой автодороги с двусторонним движением установлены контейнеры для мусора. Длина кольцевой автодороги равна
Определите минимальные расходы на доставку мусора в центр переработки отходов.
Входные данные.
Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит
В ответе укажите два числа: сначала значение искомой величины для
Типовой пример организации данных во входном файле:
6
8
20
5
13
7
19
При таких исходных данных, если контейнеры установлены на каждом километре автодороги, необходимо открыть центр переработки
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Предупреждение: для обработки
Ответ:
Приведём решение на языке Python.
f = open("107_27_B.txt")
n = int(f.readline())
elems = [0 for i in range(n)]
answers = [0 for i in range(n)]
sum = 0
rightSum = 0
leftSum = 0
for i in range(0, n):
elems[i] = int(f.readline())
for i in range(0, n):
elems[i] = elems[i] * 3
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]
sum = sum + elems[n // 2] * n // 2
answers[0] = sum
for i in range(1, n):
answers[i] = answers[i - 1] + leftSum + elems[i - 1] - rightSum - elems[(i + (n // 2) - 1) % n]
rightSum = rightSum - elems[i] + elems[(i + (n // 2) - 1) % n]
leftSum = leftSum - elems[(i + (n // 2)) % n] + elems[i - 1]
print(min(answers))
Ответ: 471228, 49113954961677.
Приведём другое решение.
Сначала считаем количество чисел в файле, затем считаем все числа
Заметим, что передвигая центр обработки в следующий пункт новая общая сумма будет равна сумме значения общей суммы центра обработки мусора в предыдущем пункте, значения
Приведём решение задачи на языке Pascal.
var
f: text;
n, i, sum, rightSum, leftSum: int64;
elems: array of int64;
answers: array of int64;
begin
assign(f, 'C:\27_B.txt');
reset(f);
readln(f, n);
setlength(elems, n);
setlength(answers, n);
sum := 0;
rightSum := 0;
leftSum := 0;
for i := 0 to n - 1 do readln(f, elems[i]);
for i := 0 to n - 1 do elems[i] := elems[i] * 3;
for i := 1 to (n div 2) - 1 do begin
sum := sum + elems[i] * i + elems[n - i] * i;
rightSum := rightSum + elems[i];
leftSum := leftSum + elems[n - i];
end;
sum := sum + elems[n div 2] * n div 2;
answers[0] := sum;
for i := 1 to n - 1 do begin
answers[i] := answers[i - 1] + leftSum + elems[i - 1] - rightSum - elems[(i + (n div 2) - 1) mod n];
rightSum := rightSum - elems[i] + elems[(i + (n div 2) - 1) mod n];
leftSum := leftSum - elems[(i + (n div 2)) mod n] + elems[i - 1];
end;
writeln(min(answers));
end.
В результате работы данного алгоритма при вводе данных из
Приведём решение Абдрахманова Леонида на языке Python для N любой чётности.
f = open("107_27_B.txt")
n = int(f.readline())
elems = [0 for i in range(n)]
answers = [0 for i in range(n)]
sum = 0
rightSum = 0
leftSum = 0
for i in range(0, n):
elems[i] = int(f.readline())
for i in range(0, n):
elems[i] = elems[i] * 3
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)
answers[0] = sum
for i in range(1, n):
answers[i] = answers[i - 1] + leftSum + elems[i - 1] - rightSum - elems[(i + (n // 2) - 1) % n]
rightSum = rightSum - elems[i] + elems[(i + (n // 2) - 1) % n]
leftSum = leftSum - elems[(i - (n // 2)) % n] + elems[i - 1]
print(min(answers))

