6300.Triangle Partition
这个题就是输出组成三角形的点的下标。
因为任意三点不共线,所以任意三点就可以组成三角形,直接排个序然后输出就可以了。
讲道理,没看懂官方题解说的啥。。。
官方题解:
求个凸包,然后选择凸包一条边AB,然后找个和AB夹角最小的点C,把ABC当做一个三角形删掉即可。这样做个n次,显然这样求出来的三角形们是合法的。
代码:
//1003-6300-三角形水题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cassert>
using namespace std;
typedef long long ll;
const int maxn=1e5+; struct node{
int x,y,id; bool operator<(const node &a) const{
if(x==a.x) return y<a.y;
return x<a.x;
} }a[maxn]; int main()
{
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
n=n*;
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
a[i].id=i;
}
sort(a+,a++n);
for(int i=;i<=n;i++){
cout<<a[i].id;
if(i%!=)cout<<" ";
else cout<<endl;
}
}
}
溜了。