传送门

Description

求\(n\)个点凸包的周长

Solution 

计算几何打暴力必备

Code 

#include<bits/stdc++.h>
#define reg register
#define ll long long
#define db double
using namespace std; const int MN=1e5+5;
const db eps=1e-8;
int n;
struct Point{
db x,y;
Point(db x=0,db y=0):x(x),y(y){}
db mo(){return sqrt(1.*x*x+1.*y*y);}
Point operator-(const Point&o)const{return Point(x-o.x,y-o.y);}
db operator^(const Point&o)const{return x*o.y-y*o.x;}
bool operator <(const Point&o)const{return x<o.x||(x==o.x&&y<o.y);}
}p[MN];
int u[MN],d[MN],tu,td; int main()
{
scanf("%d",&n);
reg int i;
for(i=1;i<=n;++i) scanf("%lf%lf",&p[i].x,&p[i].y);
std::sort(p+1,p+n+1);
for(i=1;i<=n;++i)
{
while(tu>1&&((p[u[tu]]-p[u[tu-1]])^(p[i]-p[u[tu-1]]))>-eps) --tu;
u[++tu]=i;
}
for(i=n;i;--i)
{
while(td>1&&((p[d[td]]-p[d[td-1]])^(p[i]-p[d[td-1]]))>-eps) --td;
d[++td]=i;
}
db ans=0.;
for(i=1;i<tu;++i) ans+=(p[u[i+1]]-p[u[i]]).mo();
for(i=1;i<td;++i) ans+=(p[d[i+1]]-p[d[i]]).mo();
return 0*printf("%.2lf\n",ans);
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

[USACO5.1]二维凸包模板的更多相关文章

  1. 【计算几何】二维凸包——Graham's Scan法

    凸包 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内.右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包. 一组平面上的点, ...

  2. luogu P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

    题解: 二维凸包裸题 按照x坐标为第一关键字,y坐标为第二关键字排序 然后相邻判断叉积用单调队列搞过去 正反都做一次就好了 代码: #include <bits/stdc++.h> usi ...

  3. Luogu P2742 模板-二维凸包

    Luogu P2742 模板-二维凸包 之前写的实在是太蠢了.于是重新写了一个. 用 \(Graham\) 算法求凸包. 注意两个向量 \(a\times b>0\) 的意义是 \(b\) 在 ...

  4. 【洛谷 P2742】【模板】二维凸包

    题目链接 二维凸包板子..有时间会补总结的. #include <cstdio> #include <cmath> #include <algorithm> usi ...

  5. UVA 10652 Board Wrapping(二维凸包)

    传送门 刘汝佳<算法竞赛入门经典>P272例题6包装木板 题意:有n块矩形木板,你的任务是用一个面积尽量小的凸多边形把它们抱起来,并计算出木板占整个包装面积的百分比. 输入:t组数据,每组 ...

  6. 计算几何 二维凸包问题 Andrew算法

    凸包:把给定点包围在内部的.面积最小的凸多边形. Andrew算法是Graham算法的变种,速度更快稳定性也更好. 首先把全部点排序.依照第一keywordx第二keywordy从小到大排序,删除反复 ...

  7. 使用Graham扫描法求二维凸包的一个程序

    #include <iostream> #include <cstring> #include <cstdlib> #include <cmath> # ...

  8. thinkphp二维数组模板输出方法

    thinkphp二维数组模板输出方法 先写个记录,有空再整理发上来

  9. poj 2079 Triangle (二维凸包旋转卡壳)

    Triangle Time Limit: 3000MS   Memory Limit: 30000KB   64bit IO Format: %I64d & %I64u Submit Stat ...

随机推荐

  1. JavaScript前端和Java后端的AES加密和解密(转)

    在实际开发项目中,有些数据在前后端的传输过程中需要进行加密,那就需要保证前端和后端的加解密需要统一.这里给大家简单演示AES在JavaScript前端和Java后端是如何实现加密和解密的. java端 ...

  2. IntelliJ idea鼠标移动到类上显示文档document(javadoc)内容

    IntelliJ idea鼠标移动到类上显示文档document(javadoc)内容 Step 1:设置鼠标移动到类上自动显示Javadoc文档 step2:为jdk下载javadoc Step3: ...

  3. Html-元素类型笔记

    注意点: 元素类型分为 块级元素 和 行内元素 块级元素: 在网页中以块的形式显示,默认情况都会占据一行,两个相邻的块级元素不会出现并列显示的元素,按照顺序自上而下排列. 块级元素可以定义自己的宽度和 ...

  4. vue+element 通过ref修改一切硬核样式~

    今天的需求是这样的,点击按钮,弹出一个Popover 弹出框 然后老大说,把弹出框往下移移,box-shadow值设的大一些... 然后就查看elenent的Popover文档,并没有方法,而且这个组 ...

  5. Flask--静态资源

    静态资源 from flask import Flask, render_template app = Flask(__name__, template_folder="templates& ...

  6. 申请软件著作权,wps显示代码行号功能

    申请软件著作权时,要提交代码. 格式要求,每页不少于50行,怎么设置格式,保障每页至少50行呢? 选择[页面布局]---[行号]--[每页重编行号]即可显示出来,根据显示出来的行号,调整行距等格式即可 ...

  7. plsql连接数据库后备注乱码|plsql连接数据库后中文乱码

    -- 背景:连接开发库后查阅单表备注信息时发现所有的备注都显示为"???????". -- 解决方案: -- (1). 首先先确认数据库的编码格式字符集,查询数据库编码格式. -- ...

  8. Principle如何制作动效设计?简单易学的Principle动效设计教程

    Principle for Mac是一款新开发的交互设计软件.相比 Pixate 更容易上手,界面类似 Sketch 等做图软件,思路有点像用 Keynote 做动画,更「可视化」一些. 如果您还没有 ...

  9. 在vps中搭建ftp服务器

    1. 服务器配置 首先当然是更新源列表并安装 vsftpd. sudo apt-get update sudo apt-get install vsftpd 安装完成后我们需要对服务器进行进一步的配置 ...

  10. 获取ul li的value的值

    <script> $(function(){ $(".month-list").find("li").click(function(){ var t ...