144 подписчика
Решение 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
Самое главное
Аккуратненько общитать измнение сумм и индекса. Я долго тупил 🥲
Около минуты
5 апреля 2022
105 читали