给n*3个坐标,任意三个点不会在同一直线上,将这些点排为n个三角形,每个三角形互不相交。
思路:
题目条件保证了三个点一定不在同一直线上,对坐标进行排序,先x后y,从小到大,每三个点构成一个三角形。输出构成三角形点的编号。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node
{
ll x,y;
int id;
bool operator < (const Node&other)const
{
if(x==other.x)
return y<other.y;
return x<other.x;
}
}node[3030];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=3*n;i++)
{
scanf("%lld%lld",&node[i].x,&node[i].y);
node[i].id=i;
}
sort(node+1,node+3*n+1);
for(int i=1;i<=3*n;i+=3)
{
printf("%d %d %d\n",node[i].id,node[i+1].id,node[i+2].id);
}
}
return 0;
}