显示原始代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 100005
#define INF 0x3f3f3f3f3f3f3f3fLL
#define dist(i) (abs(x[i]) + abs(y[i]))
#define int long long
using namespace std;
int n;
int x[MAX_N];
int y[MAX_N];
int id[MAX_N];
bool cmpx(int i, int j) { return x[i] < x[j]; }
bool cmpy(int i, int j) { return y[i] < y[j]; }
bool cmpd(int i, int j) { return dist(i) > dist(j); }
signed main() {
scanf("%lld", &n);
int tx, ty;
for (int i = 1; i <= n; i++) {
scanf("%lld%lld", &tx, &ty);
x[i] = tx + ty, y[i] = tx - ty;
id[i] = i;
}
if (n & 1) {
sort(id + 1, id + 1 + n, cmpx);
int xmd = x[id[(n + 1) >> 1]];
sort(id + 1, id + 1 + n, cmpy);
int ymd = y[id[(n + 1) >> 1]];
for (int i = 1; i <= n; i++) {
x[i] -= xmd, y[i] -= ymd;
}
sort(id + 1, id + 1 + n, cmpd);
n--;
}
sort(id + 1, id + 1 + n, cmpx);
sort(id + 1, id + 1 + (n >> 1), cmpy);
sort(id + 1 + (n >> 1), id + 1 + n, cmpy);
printf("%lld\n", n >> 1);
for (int L = 1, R = n; L < R; L++, R--) {
printf("%lld %lld\n", id[L], id[R]);
}
}