fork download
  1. import sys
  2. import itertools
  3. import random
  4.  
  5. input = sys.stdin.read
  6. data = input().split()
  7. i = 0
  8. t = int(data[i])
  9. i += 1
  10. results = []
  11.  
  12. for _ in range(t):
  13. n = int(data[i])
  14. k = int(data[i+1])
  15. i += 2
  16. a = list(map(int, data[i:i+n]))
  17. i += n
  18. b = list(map(int, data[i:i+n]))
  19. i += n
  20.  
  21. initial = sum(abs(a[x] - b[x]) for x in range(n))
  22. deltas = []
  23. indices = random.sample([(x, y) for x in range(n) for y in range(x+1, n)], min(10000, n*(n-1)//2))
  24.  
  25. for x, y in indices:
  26. items = [a[x], a[y], b[x], b[y]]
  27. original = abs(a[x] - b[x]) + abs(a[y] - b[y])
  28. best = original
  29. for perm in itertools.permutations(items):
  30. va1, va2, vb1, vb2 = perm
  31. new_val = abs(va1 - vb1) + abs(va2 - vb2)
  32. best = max(best, new_val)
  33. if best > original:
  34. deltas.append(best - original)
  35.  
  36. deltas.sort(reverse=True)
  37. total_increase = sum(deltas[:k])
  38. results.append(str(initial + total_increase))
  39.  
  40. print('\n'.join(results))
Success #stdin #stdout 0.11s 14180KB
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
8
9
78
48
350