HDU 6300.Triangle Partition-三角形-水题 (2018 Multi-University Training Contest 1 1003)

6300.Triangle Partition

这个题就是输出组成三角形的点的下标。

因为任意三点不共线,所以任意三点就可以组成三角形,直接排个序然后输出就可以了。

讲道理,没看懂官方题解说的啥。。。

官方题解:

求个凸包,然后选择凸包一条边AB,然后找个和AB夹角最小的点C,把ABC当做一个三角形删掉即可。这样做个n次,显然这样求出来的三角形们是合法的。

代码:

 1 //1003-6300-三角形水题
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<cassert>
 8 using namespace std;
 9 typedef long long ll;
10 const int maxn=1e5+10;
11 
12 struct node{
13     int x,y,id;
14 
15     bool operator<(const node &a) const{
16         if(x==a.x) return y<a.y;
17         return x<a.x;
18     }
19 
20 }a[maxn];
21 
22 int main()
23 {
24     int t;
25     scanf("%d",&t);
26     while(t--){
27         int n;
28         scanf("%d",&n);
29         n=n*3;
30         for(int i=1;i<=n;i++){
31             scanf("%d%d",&a[i].x,&a[i].y);
32             a[i].id=i;
33         }
34         sort(a+1,a+1+n);
35         for(int i=1;i<=n;i++){
36             cout<<a[i].id;
37             if(i%3!=0)cout<<" ";
38             else cout<<endl;
39         }
40     }
41 }

溜了。

原文地址:https://www.cnblogs.com/ZERO-/p/9431404.html