显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct {
int index;
int x, y;
int dis;
} node;
bool cmp1(node a, node b) { return a.x < b.x; }
bool cmp2(node a, node b) { return a.y < b.y; }
int dis(node a, node b) { return abs(a.x - b.x) + abs(a.y - b.y); }
int _x, _y;
node arr[100010];
bool cmp3(node a, node b) { return a.dis > b.dis; }
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> _x >> _y;
arr[i].index = i;
arr[i].x = _x + _y;
arr[i].y = _x - _y;
}
sort(arr + 1, arr + n + 1, cmp1);
if (n & 1 == 1) {
int mid_x = arr[n / 2 + 1].x;
sort(arr + 1, arr + n + 1, cmp2);
int mid_y = arr[n / 2 + 1].y;
for (int i = 1; i <= n; i++) {
arr[i].x -= mid_x;
arr[i].y -= mid_y;
arr[i].dis = abs(arr[i].x) + abs(arr[i].y);
}
sort(arr + 1, arr + n + 1, cmp3);
n--;
sort(arr + 1, arr + n + 1, cmp1);
}
sort(arr + 1, arr + n / 2 + 1, cmp2);
sort(arr + n / 2 + 1, arr + n + 1, cmp2);
int l = 1, r = n;
cout << n / 2 << endl;
while (l < r) {
cout << arr[l].index << " " << arr[r].index << endl;
l++;
r--;
}
return 0;
}