P9397 题解
Nuyoah_awa · · 题解
题目大意
给定
题目分析
我们先不考虑两两互不相交,仅考虑
于是我们再来考虑线段不能相交这个条件,我们发现对于相邻的两对点
但是你会发现交上去只有
其实,只有当
code
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node{
int x, y, id;
}a[500005];
int n, ans;
bool cmp(node u, node v)
{
if(u.x == v.x)
return u.y < v.y;
return u.x < v.x;
}
int main()
{
scanf("%d", &n);
for(int i = 1;i <= n;i++)
{
scanf("%d %d", &a[i].x, &a[i].y);
a[i].id = i;
}
if(n & 1)
{
printf("-1\n");
return 0;
}
sort(a + 1, a + n + 1, cmp);
for(int i = 1;i <= n;i += 2)
ans += a[i + 1].x - a[i].x;
printf("%d\n", ans);
for(int i = 1;i <= n;i += 2)
printf("%d %d\n", a[i].id, a[i+1].id);
return 0;
}