【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     

 

posted on 2018-07-27 16:22  myx12345  阅读(200)  评论(0编辑  收藏  举报

导航