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 }
溜了。