Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора:
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Решить
Нам нужно найти минимальные суммарные энергозатраты для сортировки чисел вставками, при этом выполняя вставку с использованием наименьшего количества энергии. Из-за вставки чисел с одного края или другого, могут быть различные энергозатраты, и нужно найти оптимальный способ вставки.
Необходимо каждый раз выбирать такой край последовательности, куда вставлять элемент, чтобы минимизировать количество пересортировок (энергозатрат) при вставке.
Нам необходимо симулировать процесс вставки для каждого элемента либо в начало, либо в конец отсортированного массива. В зависимости от того, сколько элементов нужно будет сдвинуть, вычисляем текущие энергозатраты и выбираем минимальные.
def solve():
n = int(input()) # Читаем длину перестановки
a = list(map(int, input().split())) # Читаем саму перестановку
result = 0 # Итоговые минимальные энергозатраты
sorted_part = [] # Будем постепенно строить отсортированную часть
for elem in a: # Вставляем элемент в начало или в конец уже отсортированной части
left_cost = 0 if not sorted_part else sorted_part[0] - elem
right_cost = 0 if not sorted_part else elem - sorted_part[-1]
if left_cost <= right_cost:
sorted_part.insert(0, elem)
result += left_cost
else:
sorted_part.append(elem)
result += right_cost
print(result)