zoukankan      html  css  js  c++  java
  • hdu 1348 凸包模板

    http://acm.hdu.edu.cn/showproblem.php?pid=1348

    造城墙问题,求出凸包加上一圈圆的周长即可

    凸包模板题

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <map>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define RD(x) scanf("%d",&x)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define clr0(x) memset(x,0,sizeof(x))
    #define eps 1e-9
    const double pi = acos(-1.0);
    typedef long long LL;
    const int modo = 1e9 + 7;
    const int maxn = 1e4 + 5;
    struct point{
        int x,y;
    }a[maxn];
    int b[maxn];
    bool cmp(point a,point b)
    {
        return a.x < b.x || (a.x == b.x && a.y < b.y);
    }
    double dis(point a,point b)
    {
        return sqrt(double((a.x-b.x)*(a.x-b.x)) + double((a.y - b.y)*(a.y - b.y)));
    }
    int cj(point a,point b,point c)
    {
        return (a.x - c.x) * (b.y - c.y) - (a.y - c.y) *(b.x - c.x);
    }
    int m;
    void graham(int n)
    {
        sort(a,a+n,cmp);
        b[0] = 0,b[1] = 1,b[2] = 2;
        int k = 1;
        for(int i = 2;i < n;++i){
            while(k && cj(a[i],a[b[k]],a[b[k-1]]) >= 0)
                --k;
            b[++k] = i;
        }
        m = k;
        b[++k] = n - 2;
        for(int i = n - 3;i >= 0;--i){
            while(k != m && cj(a[i],a[b[k]],a[b[k-1]]) >= 0)
                --k;
            b[++k] = i;
        }
        m = k;
    }
    int main() {
        int n,_;double f;
        RD(_);
        while(_--){
            RD(n);
            scanf("%lf",&f);
            for(int i = 0;i < n;++i){
                RD2(a[i].x,a[i].y);
            }
            graham(n);
            double ans = 0;
            for(int i = 0;i < m;++i)
                ans += dis(a[b[i]],a[b[i+1]]);
            ans += dis(a[b[m]],a[b[0]]);
            ans += pi * 2 *f;
            printf("%.0lf
    ",ans);
            if(_>0)
                puts("");
        }
        return 0;
    }
    


  • 相关阅读:
    jq判断input 复选框有没有选
    jq根据id替换修改或添加css属性
    cookie和session的关系和区别
    tp5 统一返回json格式
    tp5 上传图片(自定义图片路径)
    tp5 生成随机数
    tp5 删除图片以及文件
    tp5 上传视频方法
    tp5 跨域问题
    js替换div里的内容
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4046828.html
Copyright © 2011-2022 走看看