题意
给定3N个点,保证任意三点不在一条直线上。要求输出N行,每行三个点,代表一个三角形。N个三角形不能相交。
解题
将3N个点按照x坐标升序排列。每三个组成一个三角形即可。
AC代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn=3e3+7;
struct node
{int x,y,num;node(int x,int y,int num):x(x),y(y),num(num){}node(){}bool operator<(const node &o)const{return x<o.x || x==o.x&&y<o.y;}
}a[maxn];int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=0;i<3*n;i++){int x,y;scanf("%d%d",&x,&y);a[i]=node(x,y,i+1);}sort(a,a+3*n);int j=0;for(int i=0;i<n;i++){printf("%d %d %d\n",a[j].num,a[j+1].num,a[j+2].num);j+=3;}}return 0;
}