Вариант решения будет ниже.
Текст задачи:
-------------------------------------------------------------------------------------------
В городе M расположена кольцевая автодорога длиной в N километров с
движением в обе стороны. На каждом километре автодороги расположены
пункты приема мусора определенной вместимости. В пределах кольцевой
дороги в одном из пунктов сборки мусора собираются поставить
мусороперерабатывающий завод таким образом, чтобы стоимость доставки
мусора была минимальной. Стоимость доставки мусора вычисляется, как
вместимость пункта сбора умноженная на расстояние от пункта сбора
мусора до мусороперерабатывающего завода. Если
мусороперерабатывающий завод находится рядом с пунктом сбора
расстояние считается нулевым. Контейнеры нумеруются с 1 до N.
Рядом с каким пунктом сбора мусора нужно поставить
мусороперерабатывающий завод?
Описание входных данных:
Первое число N — количество контейнеров для мусора. Последующие N
чисел — количество килограмм мусора, которое производится на точке.
Описание выходных данных:
Одно число — номер контейнер для мусора рядом с которым стоит
расположить перерабатывающий завод.
Пример организации входных данных:
6
8
20
5
13
7
19
Для данного примера ответ — 6 (7⸱1 + 13⸱2 + 5⸱3 + 20⸱2 + 8⸱1 + 19⸱0).
--------------------------------------------------------------------------------------
Файлы тут:
https://4ege.ru/trening-informatika/64504-variant-s-dosrochnogo-etapa-2022-po-informatike.html --------------------------------------------------------------------------------------
Вариант решения:
def r(i,p,N):
'''
вычисляем растояние между точкой сбора мусора p и мусорного контейнера i
как между стрелками на циферблате с числами 1..N;
p - точка сбора мусора (мусорозавод), часовая стрелка;
i - мусорный ящик, минутная стрелка
'''
l=abs(p-i)
if l<=N//2:
return l
else:
return N-l
# из файла с данными удалите первую строку с N
s=open('27-A.txt','r').read().splitlines()
s=list(map(int,s))
N=len(s)
smin=10**15
pmin=10**15
# подсчет стоимости своза мусора в точку p
for p in range(1,N+1):
ss=[] # массив расстояний от точки p
for k in range(len(s)):
t=r(k+1,p,N)
ss.append(t)
st=0 # сюда складываем стоимости сбора мусора
for i in range(1,N+1):
st+=s[ i-1]*ss[ i-1]
if st<smin:
smin=st
pmin=p
print('>>>',smin,pmin)
----------------------------------------------
Для файла B.txt:
- считаем для p (точка сбора) - цикл с шагом 10000
- находим что искомая p в районе 40000
- сужаем поиск с 38000 до 42000 с шагом 1000
и тд за 5 минут есть ответ.