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