题目大意:建立围墙将城堡围起来,要求围墙至少距离城堡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 凸包的更多相关文章

  1. POJ1113 Wall —— 凸包

    题目链接:https://vjudge.net/problem/POJ-1113 Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submis ...

  2. POJ1113:Wall (凸包算法学习)

    题意: 给你一个由n个点构成的多边形城堡(看成二维),按顺序给你n个点,相邻两个点相连. 让你围着这个多边形城堡建一个围墙,城堡任意一点到围墙的距离要求大于等于L,让你求这个围墙的最小周长(看成二维平 ...

  3. POJ1113:Wall (凸包:求最小的多边形,到所有点的距离大于大于L)

    Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...

  4. POJ1113 Wall

    题目来源:http://poj.org/problem?id=1113题目大意: 如图所示,给定N个顶点构成的一个多边形和一个距离值L.建立一个围墙,把这个多边形完全包含在内,且围墙距离多边形任一点的 ...

  5. [poj1113][Wall] (水平序+graham算法 求凸包)

    Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...

  6. POJ-1113 Wall 计算几何 求凸包

    题目链接:https://cn.vjudge.net/problem/POJ-1113 题意 给一些点,求一个能够包围所有点且每个点到边界的距离不下于L的周长最小图形的周长 思路 求得凸包的周长,再加 ...

  7. POJ1113 Wall【凸包】

    题意: 求把城堡围起来需要的最小墙壁周长. 思路: 围墙周长为=n条平行于凸包的线段+n条圆弧的长度=凸包周长+围墙离城堡距离L为半径的圆周长. 代码: ...还是看大佬写的,自己做个记录方便日后复习 ...

  8. POJ 1113 - Wall 凸包

    此题为凸包问题模板题,题目中所给点均为整点,考虑到数据范围问题求norm()时先转换成double了,把norm()那句改成<vector>压栈即可求得凸包. 初次提交被坑得很惨,在GDB ...

  9. hdu 1348 Wall (凸包)

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

随机推荐

  1. [SQL基础教程] 3-3 HAVING

    [SQL基础教程] 3-3 HAVING HAVING子句 SELECT col_1,col_2 FROM table GROUP BY col_1,col_2 HAVING col_1 = '2'; ...

  2. 递归——CPS(一)

    程序中为什么需要栈stack? 普通的程序中,接触到子程序和函数的概念,很直观地,调用子程序时,会首先停止当前做的事情,转而执行被调用的子程序,等子程序执行完成后,再捡起之前挂起的程序,这有可能会使用 ...

  3. 关于在mfc中cstring转为float和ini

    CString str1,str, str2; GetDlgItemText(IDC_EDIT1, str1); GetDlgItemText(IDC_EDIT2, str2); UINT value ...

  4. javsscript总结

  5. 【简单并查集】Farm Irrigation

    Farm Irrigation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Tot ...

  6. 【小技巧】C#的saveFileDialog和openFileDialog的用法总结

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. HTML link标签media参数

    写html这么久了,今天才发现link标签还有个media参数,赶紧把它补回来,虽然现在没有用到,但是不能不知道它 定义和用法 media 属性规定被链接文档将显示在什么设备上. media 属性用于 ...

  8. jquery事件绑定

    window.onload 和 Jquery $(document).ready() 区别 * .用JavaScript的方式window.onload :必须等页面上所有的元素(css/js/图片) ...

  9. 折腾一天,终于配置好了,ssl证书,启用了https,用的阿里云ECS服务器

    阿里云ECS服务器配置了ssl证书, httpd-ssl.conf  的配置很重要,网站目录一定要设置正确. 阿里云的虚拟空间,弹性Web,目前好像还不支持ssl证书. 最后要网站强制https,下面 ...

  10. Oracle截取某字段前后字符串

    创建测试表及数据 1 2 3 4 5 6 7 8 9 create table test (name varchar2(10));   insert into test values ('2-15') ...