【HDOJ6300】Triangle Partition(极角排序)
题意:给定3n个点,保证没有三点共线,要求找到一组点的分组方案使得它们组成的三角形之间互不相交。
n<=1e3
思路:以y为第一关键字,x为第二关键字,按x递减,y递增排序
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 using namespace std; 5 6 struct arr 7 { 8 int x,y,z; 9 }a[3100]; 10 11 int cas,n; 12 13 bool cmp(arr a,arr b) 14 { 15 if(a.x==b.x) return a.y>b.y; 16 else return a.x<b.x; 17 } 18 19 int main() 20 { 21 freopen("1003.in","r",stdin); 22 freopen("1003.out","w",stdout); 23 scanf("%d",&cas); 24 while(cas--) 25 { 26 scanf("%d",&n); 27 int m=n*3; 28 for(int i=1;i<=m;i++) 29 { 30 scanf("%d%d",&a[i].x,&a[i].y); 31 a[i].z=i; 32 } 33 sort(a+1,a+m+1,cmp); 34 for(int i=1;i<=m;i++) 35 { 36 printf("%d",a[i].z); 37 if(!i%3) printf("\n"); 38 else printf(" "); 39 } 40 } 41 return 0; 42 } 43
null