2018 杭电多校第一场 Triangle Partition

链接: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;
}

      

猜你喜欢

转载自blog.csdn.net/hjsss3/article/details/81178326