1298 凸包周长

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 钻石 Diamond

题目描述 Description

给出平面上n个点,求出这n个点形成的凸包的周长。

凸包的定义:能覆盖住这个n个点的最小凸多边形。

输入描述 Input Description

第一行一个整数n,接下来n行,每行两个整数x和y,表示一个点的坐标。

数据范围 1 <= n <= 100000

-10000<=x,y<=10000

输出描述 Output Description

一行一个实数,表示凸包周长,保留一位小数.

样例输入 Sample Input

5

0 0

2 2

0 2

2 0

1 1

样例输出 Sample Output

8.0

数据范围及提示 Data Size & Hint



分类标签 Tags

计算几何

/*
计算几何第二题留念flag.
Jarvis O(NM)(M为凸包上的点的个数)
从最下面的一坨点找一个最左边的点.
然后以向右为基准扫描.
用叉积判断两点的位置关系.
重复上述步骤即可.
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define MAXN 100001
using namespace std;
int n,top;
double ans;
struct data{int x,y;}s[MAXN],a[MAXN];
bool cmp(const data &x,const data &y)
{
if(x.y!=y.y) return x.y<y.y;
return x.x<y.x;
}
bool chaji(const data &x,const data &y,const data &z)
{
return (y.x-x.x)*(z.y-x.y)>(z.x-x.x)*(y.y-x.y);
}
double slove(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
sort(a,a+n,cmp);
s[0]=a[0];s[1]=a[1];top=1;
for(int i=2;i<n;i++)
{
while(top&&!chaji(s[top],s[top-1],a[i])) top--;
s[++top]=a[i];
}
int l=top;
s[++top]=a[n-2];
for(int i=n-3;i>=0;i--)
{
while(top!=l&&!chaji(s[top],s[top-1],a[i])) top--;
s[++top]=a[i];
}
ans+=slove(s[0].x,s[0].y,s[top-1].x,s[top-1].y);
for(int i=0;i<top-1;i++)
ans+=slove(s[i].x,s[i].y,s[i+1].x,s[i+1].y);
printf("%.1lf",ans);
return 0;
}

Codevs 1298 凸包周长的更多相关文章

  1. HDU 1392 凸包模板题,求凸包周长

    1.HDU 1392 Surround the Trees 2.题意:就是求凸包周长 3.总结:第一次做计算几何,没办法,还是看了大牛的博客 #include<iostream> #inc ...

  2. poj 1113:Wall(计算几何,求凸包周长)

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28462   Accepted: 9498 Description ...

  3. Wall---hdu1348(求凸包周长 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 求凸包周长+2*PI*L: #include <stdio.h> #include ...

  4. POJ 1113 Wall(Graham求凸包周长)

    题目链接 题意 : 求凸包周长+一个完整的圆周长. 因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆. 思路 : 求出凸包来,然后加上圆的周长 #include <stdi ...

  5. HDU 1392 Surround the Trees (Graham求凸包周长)

    题目链接 题意 : 让你找出最小的凸包周长 . 思路 : 用Graham求出凸包,然后对每条边求长即可. Graham详解 #include <stdio.h> #include < ...

  6. poj 1113 凸包周长

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33888   Accepted: 11544 Descriptio ...

  7. LightOJ 1239 - Convex Fence 凸包周长

    LINK 题意:类似POJ的宫殿围墙那道,只不过这道题数据稍微强了一点,有共线的情况 思路:求凸包周长加一个圆周长 /** @Date : 2017-07-20 15:46:44 * @FileNam ...

  8. hdu 1392:Surround the Trees(计算几何,求凸包周长)

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu 1348:Wall(计算几何,求凸包周长)

    Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. 迁移WordPress

    一.迁移目的 WordPress是一款能让您建立出色网站.博客或应用的开源软件.官网:https://cn.wordpress.org/download/,最开始是将WordPress部署在本地虚拟机 ...

  2. Windows安全日志

    在运行中输入:eventvwr.msc,即可打开事件日志. 登录类型 描述 2 互动(键盘和屏幕的登录系统) 3 网络(即连接到共享文件夹从其他地方在这台电脑上网络) 4 批处理(即计划任务) 5 服 ...

  3. 一块40克的砝码,摔成4块,利用天平,刚好可以称出1~40g所有整数克,问:这4块分别是多少克

    public static void main(String[] args) { List<Integer> list = new ArrayList<>();//记录每组数的 ...

  4. 6.Linux查看哪个进程占用磁盘IO

    $ iotop -oP命令的含义:只显示有I/O行为的进程

  5. Wannafly挑战赛2D Delete (最短路好题)

    大意: 给定DAG, 给定点$S,T$, 每次询问给出点$x$, 求删除$x$后的$S->T$的最短路, 询问之间独立. 删除点$x$的最短路一定要经过一条边$(u,v)$, 满足$u$拓扑序在 ...

  6. 刚接触neo4j 问下 neo4j 生成的节点图形可以发布为纯网页方式么

    6 回复 pangguoming 1楼•3 年前 你是想要neo4j web控制端的可视化功能吗? 那是用D3.js 做的,你用前端用D3.js配合Java自己做 或者 去下载neo4j 的前端 开源 ...

  7. -bash: /usr/librxec/grepconf.sh:Nosuch file or directory

    最近修改/etc/profile文件时,不小心在后面添加了source /etc/profile,导致使用xshell登录远程linux的时候出现下面的信息, 一直无法进入linux,将profile ...

  8. StoneTab标签页CAD插件 3.0.0

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  9. 使用lodop.js打印控件打印table并分页等

    import {getLodop} from '@/utils/LodopFuncs.js' //打印表格 export default{ // num 打印还是打印预览 conData 对象形式 传 ...

  10. 2.XML语言

    XML语言 常见应用: XML技术除用于 /*保存有关系的数据*/之外,它还经常作软件配置文件,以描述程序模块之间的关系. 在一个系统软件中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定 例 ...