显示原始代码
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
using cd = complex<double>;
#define fi first
#define PI acos(-1)
#define se second
#define eps 1e-10
#define IOS \
ios::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0)
#define HP(x) cout << fixed << setprecision(x);
#define popcnt(x) __builtin_popcountll(x)
#define all(obj) (obj).begin(), (obj).end()
#define rall(obj) (obj).rbegin(), (obj).rend()
#define sumv(a) accumulate(all(a), 0LL)
#define lb(v, a) (lower_bound(begin(v), end(v), a) - begin(v))
#define ub(v, a) (upper_bound(begin(v), end(v), a) - begin(v))
#define inq(x, l, r) (l <= x && x <= r)
typedef long long ll;
typedef __int128 big;
typedef unsigned int ull;
typedef string str;
typedef long double db;
typedef pair<ll, ll> pll;
typedef pair<db, db> pdd;
typedef pair<int, int> pii;
typedef pair<pll, ll> pp;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef vector<db> vd;
typedef vector<str> vs;
typedef vector<vector<ll>> mal;
typedef vector<vector<int>> mai;
typedef vector<vector<str>> mas;
typedef vector<vector<db>> mad;
mt19937_64 rnd(chrono::system_clock::now().time_since_epoch().count());
const ll N = 2e5 + 5, M = 1024, H1 = 1000159, H2 = 1000133, G = 1e9, mod = 998244353;
ll n;
struct ppp {
ll x, y, w;
} a[N];
bool cmpx(ppp i, ppp j) { return i.x < j.x; }
bool cmpy(ppp i, ppp j) { return i.y < j.y; }
int main() {
IOS;
cin >> n;
for (ll i = 1; i <= n; i++) {
cin >> a[i].x >> a[i].y;
a[i].w = i;
}
if (n % 2 == 1) {
sort(a + 1, a + 1 + n, cmpx);
ll x = a[(n + 1) / 2].x;
sort(a + 1, a + 1 + n, cmpy);
ll y = a[(n + 1) / 2].y, pos = -1, mi = 2e18;
for (ll i = 1; i <= n; i++) {
if (abs(a[i].x - x) + abs(a[i].y - y) < mi) {
mi = abs(a[i].x - x) + abs(a[i].y - y);
pos = i;
}
}
swap(a[n], a[pos]);
n--;
}
sort(a + 1, a + 1 + n, cmpx);
sort(a + 1, a + 1 + n / 2, cmpy);
sort(a + 1 + n / 2, a + 1 + n, cmpy);
cout << n / 2 << endl;
for (ll i = 1; i <= n / 2; i++) {
cout << a[i].w << " " << a[n - i + 1].w << endl;
}
}