<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;
}