链接:http://acm.hdu.edu.cn/showproblem.php?pid=6300
题意:给出3n个点,让你在里头找出n个三角形,要求所有的三角形不相交,题目保证给出的点不会存在三点共线
解法:题解给的方法是建立凸包然后扫描。。。
但是更简单的方法是按照x值排个序然后按顺序每三个组成一个三角形(因为不存在三点共线所以一定能组成三角形)。。。。
同时因为排序后x递增也不存在相交问题。。。。
#include<bits/stdc++.h>
using namespace std;
struct d{
int x,y,id;
bool operator <(const d a) const
{return this->x<a.x;}
}dian[3009];
int t,n;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for (int i=0;i<n*3;i++)scanf("%d%d",&dian[i].x,&dian[i].y),dian[i].id=i;
sort(dian,dian+n*3);
for (int i=0;i<n;i++)
printf("%d %d %d\n",dian[i*3].id+1,dian[i*3+1].id+1,dian[i*3+2].id+1);
}
return 0;
}