POJ1113 Wall【凸包】
题意:
求把城堡围起来需要的最小墙壁周长。
思路:
围墙周长为=n条平行于凸包的线段+n条圆弧的长度=凸包周长+围墙离城堡距离L为半径的圆周长。
代码:
。。。还是看大佬写的,自己做个记录方便日后复习。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int N=2e5+;
const double PI=acos(-1.0);
struct point{
int x,y;
}p[N];
int n;
int stack[N],top; int cross(point p0,point p1,point p2)//p0p1 * p0p2叉积 判断顺/逆时针
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);
} double dis(point p1,point p2)
{
return sqrt((double)(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
} bool cmp(point p1,point p2)//极角排序 p[0]为最下方&&最左边的点
{
int tmp=cross(p[],p1,p2);
if(tmp>) return true;
else if(tmp==&&dis(p[],p1)<dis(p[],p2)) return true;//角度相同,距离小在前
else return false;
} void Graham(int n)//求凸包
{
if(n==){top=;stack[]=;}
if(n==)
{
top=;
stack[]=;
stack[]=;
}
if(n>)
{
for(int i=;i<=;i++) stack[i]=i;
top=;
for(int i=;i<n;i++)//O(2n) 求出前i个点集形成的凸包
{
//可以根据归纳法来证明,栈顶~0为前i-1个点集的凸包的顶点
//因为按极角排序后,若叉积<=0 则栈顶在(p[0],p[i],次栈顶)构成的三角形内部,栈顶不为前i个点集形成的凸包的极点.
while(top>&&cross(p[stack[top-]],p[stack[top]],p[i])<=)
top--;
top++;
stack[top]=i;
}
}
} int main()
{
double L;
while(cin>>n>>L)
{
int low=;
for(int i=;i<n;i++)
{
cin>>p[i].x>>p[i].y;
if((p[low].y==p[i].y&&p[low].x>p[i].x)||p[low].y>p[i].y)
low=i;
}
swap(p[],p[low]);//p[0]为最下方&&最左边的点
sort(p+,p+n,cmp);
Graham(n);
double res=;
for(int i=;i<top;i++)
res+=dis(p[stack[i]],p[stack[i+]]);
res+=dis(p[stack[]],p[stack[top]]);
res+=*PI*L;
printf("%d\n",int(res+0.5));//四设五入
}
return ;
}
POJ1113 Wall【凸包】的更多相关文章
- POJ1113 Wall —— 凸包
题目链接:https://vjudge.net/problem/POJ-1113 Wall Time Limit: 1000MS Memory Limit: 10000K Total Submis ...
- POJ1113:Wall (凸包算法学习)
题意: 给你一个由n个点构成的多边形城堡(看成二维),按顺序给你n个点,相邻两个点相连. 让你围着这个多边形城堡建一个围墙,城堡任意一点到围墙的距离要求大于等于L,让你求这个围墙的最小周长(看成二维平 ...
- POJ1113:Wall (凸包:求最小的多边形,到所有点的距离大于大于L)
Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...
- POJ1113 Wall 凸包
题目大意:建立围墙将城堡围起来,要求围墙至少距离城堡L,拐角处用圆弧取代,求围墙的长度. 题目思路:围墙长度=凸包周长+(2*PI*L),另外不知道为什么C++poj会RE,G++就没问题. #inc ...
- POJ1113 Wall
题目来源:http://poj.org/problem?id=1113题目大意: 如图所示,给定N个顶点构成的一个多边形和一个距离值L.建立一个围墙,把这个多边形完全包含在内,且围墙距离多边形任一点的 ...
- [poj1113][Wall] (水平序+graham算法 求凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
- POJ-1113 Wall 计算几何 求凸包
题目链接:https://cn.vjudge.net/problem/POJ-1113 题意 给一些点,求一个能够包围所有点且每个点到边界的距离不下于L的周长最小图形的周长 思路 求得凸包的周长,再加 ...
- POJ 1113 - Wall 凸包
此题为凸包问题模板题,题目中所给点均为整点,考虑到数据范围问题求norm()时先转换成double了,把norm()那句改成<vector>压栈即可求得凸包. 初次提交被坑得很惨,在GDB ...
- hdu 1348 Wall (凸包)
Wall Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- js跨域请求jsonp解决方案-最简单的小demo
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- mvc 验证登录
很多时候,我们需要多个页面验证用户是否登录 有2中方法. 一种是继承 Attrbuite属性,添加验证,这个可以网上搜索. 我一般使用下面的方式 创建BaseWebController继承Contro ...
- Minimum Cost POJ - 2516(模板题。。没啥好说的。。)
题意: 从发货地到商家 送货 求送货花费的最小费用... 有m个发货地,,,n个商家,,每个商家所需要的物品和物品的个数都不一样,,,每个发货地有的物品和物品的个数也不一样,,, 从不同的发货地到不同 ...
- MT【219】构造二次函数
(2012北大保送)已知$f(x)$是二次函数,且$a,f(a),f(f(a)),f(f(f(a)))$是正项等比数列;求证:$f(a)=a$ 构造二次函数$f(x)=qx$,则$a,f(a),f(f ...
- MT【12】三点坐标求面积
$L_1,L_2$是O发出的两条射线,C是一个常数,一条动直线$l$分别与$L_1,L_2$交于A,B两点.$S_{\Delta ABC}=C$,求A,B的中点D的轨迹方程.(2012北大自主招生) ...
- 自学Aruba5.1.1-基于时间的Role定义
点击返回:自学Aruba之路 自学Aruba5.1.1-基于时间的Role定义 可以配置一条rule是基于时间来做限制 具体配置时间(Time ranges)步骤如下: 1 建立一个绝对时间范围,命令 ...
- Cgod省选的爆零日记
声明 虽然是日记,但博主太咕咕咕了,所以可能会鸽掉. 3.11 辣鸡杭二的机子,卡我常数,削我分数. 他们那边的机子好像比我们慢四倍的样子? 开局刚\(T3\),分数全靠骗. \(yy\)许久\(GG ...
- 【BZOJ2671】Calc(莫比乌斯反演)
[BZOJ2671]Calc 题面 BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1.\(1\le a\lt b\le N\) 2.\(a+b\)整除\(a*b\) 我竟然粘了题面!!! ...
- SharePoint 错误集 2
1 Run command “New-SPConfigurationDatabase" Feature Description: error message popup after run ...
- 最最最最最基础的SQL Server
--创建数据库(命名不允许为汉字开头.不允许为数字开头.不允许为符号开头) create database Class --执行完成进行下一步点加go go --定位数据库 use Class --创 ...