zoukankan      html  css  js  c++  java
  • USACO 5.1.1凸包

    转自:http://blog.csdn.net/cnyali/article/details/50097593

    程序:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    
    typedef struct
    {
    	double x,y;	
    }P;
    typedef struct
    {
    	int s,t;
    	double k,l;
    }E;
    
    int n,top;
    double sum;
    P p[10010];
    E e[20020];
    
    bool comp(const P &a,const P &b)
    {
    	return a.x<b.x;
    }
    
    double dist(int a,int b)
    {
    	return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y));
    }
    
    double slope(int a,int b)
    {
    	if (p[b].x-p[a].x==0) return 0;
    	return (p[b].y-p[a].y)*1.0/(p[b].x-p[a].x);
    }
    
    int main()
    {
    	freopen("fc.in","r",stdin);
    	freopen("fc.out","w",stdout);
    	int i,j;
    	scanf("%d",&n);
    	for (i=1;i<=n;i++)
    		scanf("%lf%lf",&p[i].x,&p[i].y);
    	sort (p+1,p+n+1,comp);
    	i=1;
    	while (i<n) {
    		j=i+1;
    		e[++top].s=i;
    		e[top].t=j;
    		e[top].l=dist(i,j);
    		e[top].k=slope(i,j);
    		while (top>1&&e[top-1].k>e[top].k) {
    			top--;
    			e[top].t=e[top+1].t;
    			e[top].l=dist(e[top].s,e[top].t);
    			e[top].k=slope(e[top].s,e[top].t);
    		}
    		i++;
    	}
    	while (top>0) sum+=e[top--].l;
    	i=1;
    	while (i<n) {
    		j=i+1;
    		e[++top].s=i;
    		e[top].t=j;
    		e[top].l=dist(i,j);
    		e[top].k=slope(i,j);
    		while (top>1&&e[top-1].k<e[top].k) {
    			top--;
    			e[top].t=e[top+1].t;
    			e[top].l=dist(e[top].s,e[top].t);
    			e[top].k=slope(e[top].s,e[top].t);
    		}
    		i++;
    	}
    	while (top>0) sum+=e[top--].l;
    	printf("%.2f
    ",sum);
    	return 0;
    }


  • 相关阅读:
    2-分类
    1-确定变量间是否有关系—显著性检验
    git简单操作
    Hadoop HA和Hbase HA
    Docker入门操作
    内存数据库专题(MemCached 和Redis)
    Spark MLlib和Sprk GraphX
    Spark 调优
    Spark Streaming基础
    Spark SQL
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7026857.html
Copyright © 2011-2022 走看看