zoukankan      html  css  js  c++  java
  • poj 1113 Wall

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    #define Max 1100
    #define PI 3.1415926
    struct Point
    {
        int x,y;
    }p[Max];
    int dis(Point p1,Point p2)
    {
        return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
    }
    int xmult(Point p1,Point p2,Point p0)
    {
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    bool cmp(Point p1,Point p2)
    {
        int tmp=xmult(p1,p2,p[0]);
        if(tmp>0)
            return true;
        if(!tmp&&dis(p1,p[0])<dis(p2,p[0]))
            return true;
        return false;
    }
    int Graham(Point *p,int n)
    {
        sort(p+1,p+n,cmp);
        int i,top=1;
        for(i=2;i<n;i++)
        {
            while(xmult(p[top],p[i],p[top-1])<=0&&top>=1)
            top--;
            top++;
            p[top]=p[i];
        }
        return top+1;
    }
    double cal(Point *p,int n)
    {
        int i,j;
        double ans=0;
        p[n++]=p[0];
        for(i=0;i<n-1;i++)
        {
            ans+=sqrt((double)dis(p[i],p[i+1]));
        }
        return ans;
    }
    int main()
    {
        int i,n,l;
        scanf("%d%d",&n,&l);
        for(i=0;i<n;i++)
        {
            scanf("%d %d",&p[i].x,&p[i].y);
            if(p[i].y<p[0].y||p[i].y==p[0].y&&p[i].x<p[0].x)
                swap(p[i],p[0]);
        }
        n=Graham(p,n);
        double ans=cal(p,n);
        ans+=2*PI*l;
        printf("%.0lf
    ",ans);
        return 0;
    }
  • 相关阅读:
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    BZOJ 2654
    BZOJ 1016
    BZOJ 4870
    BZOJ 4868
    BZOJ 1503
    P3379 【模板】最近公共祖先(LCA)
    雅礼2017国庆1-1
    使用 CefSharp 网页显示问题
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3234447.html
Copyright © 2011-2022 走看看