fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5.  
  6. const int oo = 1e5 + 3;
  7.  
  8. int t, n, k;
  9. int a[oo];
  10.  
  11. /*
  12. - Các phần tử từ k -> n - k + 1 luôn bị xóa
  13. - Các phần tử còn lại ở 2 bên thì lấy max cặp đối xứng
  14. VD:
  15. n = 8, k = 3
  16. a1 a2 [a3 a4 a5 a6] a7 a8
  17.  
  18. đoạn từ a3 -> a6 chắc chắn bị xóa
  19. còn lại là a1 a2 a7 a8
  20. chỉ bốc được a2 hoặc a7, nếu bốc a2 thì a7 không còn là phần tử thứ k từ trái nữa
  21. => lấy max các cặp đối xứng
  22. */
  23.  
  24. void solve() {
  25. cin >> n >> k;
  26. for (int i = 1; i <= n; i++) {
  27. cin >> a[i];
  28. }
  29.  
  30. int res = 0;
  31.  
  32. if (2 * k >= n) {
  33. for (int i = k; i <= n - k + 1; i++) {
  34. res += a[i];
  35. }
  36.  
  37. for (int i = 1; i < k; i++) {
  38. res += max(a[i], a[n - i + 1]);
  39. }
  40. } else {
  41. for (int i = 1; i <= n - k + 1; i++) {
  42. res += max(a[i], a[n - i + 1]);
  43. }
  44. }
  45.  
  46. cout << res << '\n';
  47. }
  48.  
  49. int32_t main() {
  50.  
  51. cin >> t;
  52.  
  53. while(t--) {
  54. solve();
  55. }
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0s 5320KB
stdin
4
4 2
1 2 3 4
4 4
3 4 1 2
1 1
1
6 3
1 4 8 2 6 3
stdout
9
11
1
19