zoukankan      html  css  js  c++  java
  • HDU

    <题目链接>

    题目大意:

    给出一些点,让你求出将这些点全部围住需要的多长的绳子。

    Andrew算法

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    struct node{
        int x,y;
    };
    node vex[1000];
    bool cmp1(node a,node b){
        if(a.y==b.y)
            return a.x<b.x;
        else
            return a.y<b.y;
    }
    int cross(node,node,node);
    double dis(node,node);
    bool cmp(node a,node b){
        int m=cross(vex[0],a,b);
        if(m==0)
            return dis(vex[0],a)-dis(vex[0],b)<=0?true:false;
        else
            return m>0?true:false;
    }
    node stackk[1000];
    int cross(node a,node b,node c){
        return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
    }
    double dis(node a,node b){
        return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y));
    }
    int main(){
        int t;
        while(scanf("%d",&t),t!=0){
            int i;
            for(i=0;i<t;i++){
                scanf("%d%d",&vex[i].x,&vex[i].y);
            }
            if(t==1)
                printf("%.2f
    ",0.00);
            else if(t==2)
                printf("%.2f
    ",dis(vex[0],vex[1]));
            else{
                sort(vex,vex+t,cmp1);
                sort(vex+1,vex+t,cmp);
                memset(stackk,0,sizeof(stackk));
                stackk[0]=vex[0];
                stackk[1]=vex[1];
                int top=1;
                for(i=2;i<t;i++){
                    while(i>=1&&cross(stackk[top-1],stackk[top],vex[i])<0)
                        top--;  
                    stackk[++top]=vex[i]; 
                }
                double s=0;
                for(i=1;i<=top;i++)
                    s+=dis(stackk[i-1],stackk[i]);
                s+=dis(stackk[top],vex[0]);
                printf("%.2f
    ",s);
            }
        }
    }

    2018-08-22

  • 相关阅读:
    Eclipse生成部署描述符(web.xml)
    异步Servlet和异步过虑器
    安装 R 及 R 包
    Servlet封装类
    设计模式——装饰者模式
    Eclipse快速生成覆盖方法、Getter、Setter的方法
    查看CPU核数和内存
    Filter 过滤器
    Listener 监听器
    Tag file
  • 原文地址:https://www.cnblogs.com/00isok/p/9520971.html
Copyright © 2011-2022 走看看