Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на питон

Александрова Ученик (128), на голосовании 2 недели назад
Максимизируй сумму
Ограничение времени: 1.0 секунды
Ограничение памяти: 64 МБ
Вам дан массив a размера n. Вы можете применять следующую операцию: выбрать 2 элемента из этого массива и поменять их местами.
Вам необходимо посчитать, какую максимальную сумму разностей соседних элементов можно получить, если можно применять операцию не более k раз.
Исходные данные
В первой строке вводятся целые числа n, k — длина массива чисел, максимальное количество операций соответственно. (2 ≤ n, k ≤ 105)
Во второй строке через пробел вводятся целые числа ai (0 ≤ ai ≤ 109).
Результат
В единственной строке выведите единственное число — максимальную сумму разностей соседних элементов, которую можно получить после всех операций.
Примеры
исходные данные
5 3
1 3 0 3 2
результат 3
10 7
4 2 6 8 3 2 1 6 8 9
результат 8
Голосование за лучший ответ
Артём Аксёнов Мастер (1953) 1 месяц назад
 def max_sum_of_differences(n, k, a): 
# Сортируем массив
a.sort()

# Создаем новый массив для максимизации разностей
new_array = []

# Добавляем наименьшие элементы
for i in range(k):
new_array.append(a[i])

# Добавляем наибольшие элементы
for i in range(n - k, n):
new_array.append(a[i])

# Если k больше, чем n/2, то мы можем добавить оставшиеся элементы
if k > n // 2:
for i in range(k - (n - k)):
new_array.append(a[n - 1 - i])

# Вычисляем сумму разностей
max_sum = 0
for i in range(1, len(new_array)):
max_sum += abs(new_array[i] - new_array[i - 1])

return max_sum

# Чтение входных данных
n, k = map(int, input().split())
a = list(map(int, input().split()))

# Вычисление результата
result = max_sum_of_differences(n, k, a)

# Вывод результата
print(result)
GGG Просветленный (34893) 1 месяц назад
 n, k = map(int, input().split()) 
a = list(map(int, input().split()))

min_val = min(a)
max_val = max(a)
pos_min = a.index(min_val)
pos_max = a.index(max_val)

if k >= 2:
result = max_val - min_val
elif k == 1:
res1 = a[-1] - a[0]
# Swap a[0] with min_val if they are not the same
if a[0] != min_val:
a_swap = a.copy()
a_swap[0], a_swap[pos_min] = a_swap[pos_min], a_swap[0]
res1 = max(res1, a_swap[-1] - a_swap[0])
# Swap a[-1] with max_val if they are not the same
if a[-1] != max_val:
a_swap = a.copy()
a_swap[-1], a_swap[pos_max] = a_swap[pos_max], a_swap[-1]
res1 = max(res1, a_swap[-1] - a_swap[0])
result = res1
else:
result = a[-1] - a[0]

print(result)
Похожие вопросы