Найти тему

Решение 27 с Досрока на 2 Балла


Cчитаем, сколько будет стоит доставка в каждую точку:

1. для 0 просто рассчитываем цену через перемножение всех значений на расстояние и складываем

price = [0] * n

for i in range(n):

r = min(n - i, i)

print(r, a[i])

price[0] += a[i] * r

2. берём индекс на другой стороне кольца

2.1 и считаем сумму точек от неё, до 0 (не включая) — сумма_назад

2.2 считаем сумму точек от 1 до индекса (не включая) — сумма вперед

o_i = n // 2

sum_nz = sum(a[o_i:])

sum_vp = sum(a[1:o_i])

3. каждая следующая точка (от 1 до n-1) — это предыдущая точка

3.1 + сдвинутая сумма назад

3.2 - сдвинутая сумма вперёд

for i in range(1, n):

sum_vp += a[o_i]

sum_nz += a[i - 1] - a[o_i]

price[i] = price[i - 1] - sum_vp + sum_nz

sum_vp -= a[i]

o_i = (o_i + 1) % n

Самое главное

Аккуратненько общитать измнение сумм и индекса. Я долго тупил 🥲
Около минуты
105 читали