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

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    struct Point
    {
        int x,y;
    
    }p[1024],ch[1024];
    
    Point operator - (Point a,Point b)
    {
        Point c;
        c.x=a.x-b.x;
        c.y=a.y-b.y;
        return c;
    }
    
    int cross(Point a,Point b)
    {
        return a.x*b.y-b.x*a.y;
    }
    
    double dot(Point a,Point b)
    {
        return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    
    bool cmp(Point a,Point b)
    {
        if(a.x==b.x) return a.y<b.y;
        else return a.x<b.x;
    }
    
    int main()
    {
        int i,k,n,m,l;
        double ans;
        while(~scanf("%d%d",&n,&l))
        {
            for(i=0;i<n;i++)
                scanf("%d%d",&p[i].x,&p[i].y);
            sort(p,p+n,cmp);
            m=0;
            for(i=0;i<n;i++)
            {
                while(m>1&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;
                ch[m++]=p[i];
            }
            k=m;
            for(i=n-2;i>=0;i--)
            {
                while(m>k&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;
                ch[m++]=p[i];
            }
            if(n>1) m--;
            ans=0;
            for(i=0;i<m;i++)
            {
                ans+=dot(ch[i],ch[i+1]);
            }
            printf("%.0f
    ",ans+2*3.1415926*l);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    5.线性回归算法
    4.K均值算法--应用
    3.K均值算法
    机器学习2
    机器学习1
    第十五次作业
    第十三次作业
    第十一次作业
    P1250 种树
    P1516 青蛙的约会
  • 原文地址:https://www.cnblogs.com/xryz/p/4847810.html
Copyright © 2011-2022 走看看