zoukankan      html  css  js  c++  java
  • [日常摸鱼]HDU1348Wall-凸包

    我学习进度慢得连我自己都怕…

    题意:大概给$n$个点搞出它的凸包,然后还要在凸包外弄一层厚为$l$的东西,求这个东西的周长

    我个滞涨居然把pi开成了int…搞了一个晚上才看见

    凸包直接求,因为是凸多边形所以答案就是凸包的周长加上$2 pi l$

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int N=1005;
    const double pi=acos(-1);
    struct Point
    {
        double x,y;
        Point(double x=0,double y=0):x(x),y(y){}
    }p[N];
    int T,n,L;
    int q[N];
    inline Point operator - (Point a,Point b)
    {
        return Point(a.x-b.x,a.y-b.y);
    }
    inline double Cross(Point a,Point b)
    {
        return a.x*b.y-a.y*b.x;
    }
    inline double sqr2(double x){return x*x;}
    inline double lenght(Point a,Point b)
    {
        return sqrt(sqr2(a.x-b.x)+sqr2(a.y-b.y));
    }
    inline bool cmp(const Point &a,const Point &b)
    {
        if(a.x==b.x)return a.y<b.y;
        return a.x<b.x;
    }
    inline int convexHull()
    {
        sort(p+1,p+n+1,cmp);
        int m=0;
        for(register int i=1;i<=n;i++)
        {
            while(m>=2&&Cross(p[q[m]]-p[q[m-1]],p[i]-p[q[m-1]])<=0)m--;
            q[++m]=i;
        }
        int k=m;
        for(register int i=n-1;i>=1;i--)
        {
            while(m>k&&Cross(p[q[m]]-p[q[m-1]],p[i]-p[q[m-1]])<=0)m--;
            q[++m]=i;
        }
        if(n>1)m--;
        return m;
    }
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&L); 
            for(register int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
            int m=convexHull();double ans=0;
            for(register int i=2;i<=m;i++)ans+=lenght(p[q[i]],p[q[i-1]]);
            ans+=lenght(p[q[m]],p[q[1]]);
            ans+=2*pi*L;
            printf("%.0lf
    ",ans);
            if(T)printf("
    "); 
        }
        return 0;
    }
  • 相关阅读:
    Spring--之旅
    体验 Windows 系统 CVM
    基于 CentOS 搭建 WordPress 个人博客
    Codeforces Round #316 (Div. 2)
    BZOJ 1048 [HAOI2007]分割矩阵
    BZOJ 1047 [HAOI2007]理想的正方形
    BZOJ 1045 [HAOI2008] 糖果传递
    BZOJ 1042 [HAOI2008]硬币购物
    BZOJ 1030 [JSOI2007]文本生成器
    BZOJ 第二波刷题开始喽
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/8306489.html
Copyright © 2011-2022 走看看