POJ1113 Wall 凸包
题目大意:建立围墙将城堡围起来,要求围墙至少距离城堡L,拐角处用圆弧取代,求围墙的长度。
题目思路:围墙长度=凸包周长+(2*PI*L),另外不知道为什么C++poj会RE,G++就没问题。
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 100005
#define PI acos(-1)
using namespace std; struct node
{
int x,y;
}point[MAX]; int Stuck[MAX],n,l,top; bool cmp(struct node A,struct node B)
{
if(A.y < B.y)
return true;
if(A.y==B.y && A.x<B.x)
return true;
return false;
} int Cross(int x1,int y1,int x2,int y2,int x3,int y3)
{
return (x1-x2)*(y1-y3)-(x1-x3)*(y1-y2);
} void Graham()
{
memset(Stuck,,sizeof(Stuck));
Stuck[]=;
Stuck[]=;
top=;
for(int i=;i<n;i++)
{
while(top> && Cross(point[Stuck[top]].x,point[Stuck[top]].y,point[Stuck[top-]].x,point[Stuck[top-]].y,point[i].x,point[i].y)<=)
top--;
Stuck[++top]=i;
}
int len=top;
Stuck[++top]=n-;
for(int i=n-;i>=;i--)
{
while(top!=len && Cross(point[Stuck[top]].x,point[Stuck[top]].y,point[Stuck[top-]].x,point[Stuck[top-]].y,point[i].x,point[i].y)<=)
top--;
Stuck[++top]=i;
}
} double Dist(int pos1,int pos2)
{
return sqrt((point[pos1].x-point[pos2].x)*(point[pos1].x-point[pos2].x)*1.0+(point[pos1].y-point[pos2].y)*(point[pos1].y-point[pos2].y));
} int main()
{
int k;
while(scanf("%d%d",&n,&l)!=EOF)
{
k=;
for(int i=;i<n;i++)
{
scanf("%d%d",&point[i].x,&point[i].y);
if(point[k].y > point[i].y || (point[k].x>point[i].x && point[k].y==point[i].y))
k=i;
}
swap(point[],point[k]);
sort(point+,point+n,cmp);
Graham();
double sum=;
sum+=Dist(Stuck[],Stuck[top])+*PI*l;
for(int i=;i<=top;i++)
sum+=Dist(Stuck[i],Stuck[i-]);
int ans=(int)(sum+0.5);
printf("%d\n",ans);
}
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
题目来源: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的周长最小图形的周长 思路 求得凸包的周长,再加 ...
- POJ1113 Wall【凸包】
题意: 求把城堡围起来需要的最小墙壁周长. 思路: 围墙周长为=n条平行于凸包的线段+n条圆弧的长度=凸包周长+围墙离城堡距离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 ...
随机推荐
- JNDI实现服务器(tomcat)与数据库(mysql)连接的数据源配置以及获取连接的java代码
->首先将mysql的jar包导入到tomcat/lib文件夹下 ->然后在tomcat/conf/context.xml文件中配置以下内容 <Resource name=" ...
- Jdk 1.8*安装并配置
转载自:http://www.cnblogs.com/zlslch/p/5658399.html 简单说下,jdk1.8*的下载,见http://www.cnblogs.com/zlslch/p/5 ...
- 前端用Request Payload方式请求后台
后台接收方式: InputStream inputStream = request.getInputStream(); byte[] buff = new byte[1024]; int len = ...
- SQLServer 重建索引前后对比
在做维护项目的时,我们经常会遇到索引维护的问题,通过语句,我们就可以判断某个表的索引是否需要重建. 执行一下语句:先分析表的索引 分析表的索引建立情况:DBCC showcontig('Table') ...
- python修炼4
---恢复内容开始--- 集合 建立 set() ={},集合没有顺序,由不可改变的数字 ,字符串,元组构成 #交集print(a&b) #a.intersection(b) #并集prin ...
- mysql 查询语句
查询一段时间到另一段时间的数据 $from=$_POST['from']; $to=$_POST['to']; $query_xiangmu ="SELECT * FROM yichang ...
- Redis字符串类型相关操作命令
string是redis最基本的类型,可以包括任何类型数据,如jpg图片或者序列化对象. 单个value最大上限是1G字节 如果只使用string类型,redis就可以被看做具有持久化特性的memca ...
- linux中找不到/etc/sysconfig/iptables
解决办法初始化iptables. #iptables -F #service iptables save #service iptables restart
- Linux安全检测常用方法
一. 系统状态备份 主要是网络.服务.端口.进程等状态信息的备份工作 系统服务备份: chkconfig --list > services.log 进程备份: ps -ef > ps.l ...
- 第五十六节,python实现支持并发、断点续传的Ftp程序
一.要求 1.用户md5认证 2.支持多用户同时登陆(并发) 3.进入用户的命令行模式,支持cd切换目录,ls查看目录子文件 4.执行命令(ipconfig) 5.传输文件: a.支持断点续传 b.传 ...