P2742 二维凸包

来源:互联网 发布:淘宝异常订单销量删除 编辑:程序博客网 时间:2024/04/29 16:45
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;const int maxn=10000+10;struct node{double x,y;}a[maxn];int stack[maxn],top;bool cmp(node a,node b){return a.x<b.x;}double dis(int u,int v){return sqrt((a[u].x-a[v].x)*(a[u].x-a[v].x)+(a[u].y-a[v].y)*(a[u].y-a[v].y));}bool pd(int u,int v,int w){return (a[u].y-a[v].y)*(a[v].x-a[w].x)>(a[u].x-a[v].x)*(a[v].y-a[w].y);}int main(){int n,i;cin>>n;for(i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);sort(a+1,a+n+1,cmp);top=2;stack[1]=1;stack[2]=2;for(i=3;i<=n;i++){while(top>1 && !pd(i,stack[top],stack[top-1]))top--;stack[++top]=i;}double ans=0;for(i=1;i<top;i++)ans+=dis(stack[i],stack[i+1]);top=2;stack[1]=1;stack[2]=2;for(i=3;i<=n;i++){while(top>1 && pd(i,stack[top],stack[top-1]))top--;stack[++top]=i;}for(i=1;i<top;i++)ans+=dis(stack[i],stack[i+1]);printf("%.2lf",ans);return 0;}

0 0
原创粉丝点击