/VOI 22 Bài 1 - Chọn cặp

<Problem>

https://oj.vnoi.info/problem/voi22_pair
              #include <iostream>
        #include <algorithm>
        #include <map>
        using namespace std;
        
        map<int, int> iDex;
        
        int main() {
            if (fopen("PAIR.INP", "r")) {
            freopen("PAIR.INP", "r", stdin);
            freopen("PAIR.OUT", "w", stdout);
          }
          int n, d;
          cin >> n >> d;
        
          int* arr = new int[n + 10];
        
          for (int i = 0; i < n; i++) {
            cin >> arr[i];
            iDex[arr[i]]++;
          }
        
          if (d == 0) {
            int ans = 0;
            for (int i = 0; i < n - 1; i++) {
              for (int j = i + 1; j < n; j++) {
                int sum = arr[i] + arr[j];
                int pair = 0;
        
                map<int, int> tmp(iDex);
                
                for (int k = 0; k < n; k++) {
                  if (arr[k] == sum - arr[k]) {
                    while (tmp[arr[k]] >= 2) {
                      tmp[arr[k]] -= 2;
                      pair++;
                    }
                  }
                  else if (tmp[arr[k]] > 0 && tmp[sum - arr[k]] > 0) {
                    tmp[arr[k]]--;
                    tmp[sum - arr[k]]--;
                    pair++;
                  };
                }
                ans = max(ans, pair);
              }
            }
            cout << ans;
          }
          else if (d == 1) {
            sort(arr, arr + n);
            int ans = 0;
            for (int i = 0; i < n - 1; i++) {
              for (int j = i + 1; j < n; j++) {
                int sum = arr[i] + arr[j];
                int left = 0;
                int right = n - 1;
                int pair = 0;
        
                while (left < right) {
                  if (arr[left] + arr[right] == sum + 1) {
                    pair++;
                    left++;
                    right--;
                  }
                  else if (arr[left] + arr[right] == sum) {
                    pair++;
                    left++;
                    right--;
                  }
                  else {
                    if (arr[left] + arr[right] > sum) right--;
                    else if (arr[left] + arr[right] < sum) left++;
                  }
                }
        
                ans = max(ans, pair);
              }
            }
        
            cout << ans;
          }
        
          return 0;
        
        }