fork(1) download
  1. from itertools import combinations
  2.  
  3. def max_abs_sum_gain(a1, b1, a2, b2):
  4. orig = abs(a1 - b1) + abs(a2 - b2)
  5. values = [a1, b1, a2, b2]
  6. max_new = 0
  7. for pair in combinations(range(4), 2):
  8. i, j = pair
  9. rest = [k for k in range(4) if k != i and k != j]
  10. for a_pair in [(values[i], values[j]), (values[j], values[i])]:
  11. for b_pair in [(values[rest[0]], values[rest[1]]), (values[rest[1]], values[rest[0]])]:
  12. new_v = abs(a_pair[0] - a_pair[1]) + abs(b_pair[0] - b_pair[1])
  13. max_new = max(max_new, new_v)
  14. return max_new - orig
  15.  
  16. def solve():
  17. import sys
  18. input = sys.stdin.read
  19. data = input().split()
  20.  
  21. idx = 0
  22. t = int(data[idx])
  23. idx += 1
  24. results = []
  25. for _ in range(t):
  26. n = int(data[idx])
  27. idx += 1
  28. k = int(data[idx])
  29. idx += 1
  30. a = list(map(int, data[idx:idx + n]))
  31. idx += n
  32. b = list(map(int, data[idx:idx + n]))
  33. idx += n
  34.  
  35. initial_v = sum(abs(a[i] - b[i]) for i in range(n))
  36. gains = []
  37.  
  38. for i in range(n - 1):
  39. gain = max_abs_sum_gain(a[i], b[i], a[i + 1], b[i + 1])
  40. if gain > 0:
  41. gains.append(gain)
  42.  
  43. gains.sort(reverse=True)
  44. final_v = initial_v - sum(gains[:k])
  45. results.append(str(final_v))
  46.  
  47. print("\n".join(results))
  48.  
  49. solve()
  50.  
Success #stdin #stdout 0.09s 14004KB
stdin
5
2 1
1 7
3 5
3 2
1 5 3
6 2 4
5 4
1 16 10 10 16
3 2 2 15 15
4 1
23 1 18 4
19 2 10 3
10 10
4 3 2 100 4 1 2 4 5 5
1 200 4 5 6 1 10 2 3 4
stdout
0
9
30
-20
302