Друзья программисты, есть вопрос

Есть задача:

Друзья программисты, есть вопрос

И вот такой код:

t = int(input())
for i in range(t):
n, k = map(int, input().split())
a = list(map(int, input().split()))
srednee = sum(a) / len(a)
if n % 2 == 0:
hinata = a[:len(a) // 2]
kenma = a[len(a) // 2:]
hinata.sort(reverse=True)
kenma.sort(reverse=True)
else:
hinata = a[:len(a) // 2]
kenma = a[(len(a) // 2) + 1:]
if a[len(a) // 2] > srednee:
hinata.append(a[len(a) // 2])
else:
kenma.reverse()
kenma.append(a[len(a) // 2])
kenma.reverse()
hinata.sort(reverse=True)
kenma.sort(reverse=True)
while k > 0:
dlh = len(hinata)
dlk = len(kenma)
srednee = (sum(hinata) + sum(kenma)) / (dlh + dlk)
if dlh == dlk:
if (abs(srednee - hinata[dlh - 1])) > (abs(srednee - kenma[0])):
hinata.remove(hinata[dlh - 1])
k -= 1
else:
kenma.remove(kenma[0])
k -= 1
else:
if dlh > dlk:
hinata.remove(hinata[dlh - 1])
k -= 1
else:
kenma.remove(kenma[0])
k -= 1
print(sum(hinata) - sum(kenma))

И нужно его как-то ускорить потому что там на 0.004 секунды превышается ограничение по времени.

2.5K2.5K показов
374374 открытия
24 комментария

Ожидание: делаешь игры.
Реальность: решаешь математические трехэтажные задачи.

Ответить

Это откуда? Не прочь сам порешать такое

Ответить

это задачки яндекса для собеса?

Ответить
Автор

Ага. Говорят на какую - то новую русскую игру набирают команду, типа ответ Ведьмаку.

Ответить

Динамика, квадратичная что ли? Но увидеть бы ограничения на размеры последовательностей. Обычно это позволяет понять, какую сложность должен иметь итоговый алгоритм - O(n + k) или O(n*k).

Ответить

Да выглядит как O(n-k)

Ответить