poj 1113 凸包周长
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 33888 | Accepted: 11544 |
Description

Your task is to help poor Architect to save his head, by writing a program that will find the minimum possible length of the wall that he could build around the castle to satisfy King's requirements.
The task is somewhat simplified by the fact, that the King's castle has a polygonal shape and is situated on a flat ground. The Architect has already established a Cartesian coordinate system and has precisely measured the coordinates of all castle's vertices in feet.
Input
Next N lines describe coordinates of castle's vertices in a clockwise order. Each line contains two integer numbers Xi and Yi separated by a space (-10000 <= Xi, Yi <= 10000) that represent the coordinates of ith vertex. All vertices are different and the sides of the castle do not intersect anywhere except for vertices.
Output
Sample Input
- 9 100
- 200 400
- 300 400
- 300 300
- 400 300
- 400 400
- 500 400
- 500 200
- 350 200
- 200 200
Sample Output
- 1628
- /*
- poj 1113 凸包周长
- 给你一些点组成的城堡,要求用最少的墙围起来,且墙距离城堡有一定距离
- 当城堡有转角时,毫无疑问墙建成圆弧的最合适
- 假设一个转角内角为x,那么圆弧的角度就是180-x度
- 所以最终形成圆弧角度就是 n*180 - 多边形内角和 = 360
- 对于凹陷下去的地方而言, 很明显直线更短. 所以求个凸包
- ans=凸包周长+圆周长
- hhh-2016-05-06 21:51:48
- */
- #include <iostream>
- #include <vector>
- #include <cstring>
- #include <string>
- #include <cstdio>
- #include <queue>
- #include <cmath>
- #include <algorithm>
- #include <functional>
- #include <map>
- using namespace std;
- #define lson (i<<1)
- #define rson ((i<<1)|1)
- using namespace std;
- const int maxn = 40010;
- double PI = 3.1415926;
- double eps = 1e-8;
- int n,m;
- int sgn(double x)
- {
- if(fabs(x) < eps) return 0;
- if(x < 0)
- return -1;
- else
- return 1;
- }
- struct Point
- {
- double x,y;
- Point() {}
- Point(double _x,double _y)
- {
- x = _x,y = _y;
- }
- Point operator -(const Point &b)const
- {
- return Point(x-b.x,y-b.y);
- }
- double operator ^(const Point &b)const
- {
- return x*b.y-y*b.x;
- }
- double operator *(const Point &b)const
- {
- return x*b.x + y*b.y;
- }
- };
- struct Line
- {
- Point s,t;
- Line() {}
- Line(Point _s,Point _t)
- {
- s = _s;
- t = _t;
- }
- pair<int,Point> operator &(const Line&b)const
- {
- Point res = s;
- if( sgn((s-t) ^ (b.s-b.t)) == 0) //通过叉积判断
- {
- if( sgn((s-b.t) ^ (b.s-b.t)) == 0)
- return make_pair(0,res);
- else
- return make_pair(1,res);
- }
- double ta = ((s-b.s)^(b.s-b.t))/((s-t)^(b.s-b.t));
- res.x += (t.x-s.x)*ta;
- res.y += (t.y-s.y)*ta;
- return make_pair(2,res);
- }
- };
- Point lis[maxn];
- int Stack[maxn],top;
- double dist(Point a,Point b)
- {
- return sqrt((a-b)*(a-b));
- }
- bool cmp(Point a,Point b)
- {
- double t = (a-lis[0])^(b-lis[0]);
- if(sgn(t) == 0)
- {
- return dist(a,lis[0]) <= dist(b,lis[0]);
- }
- if(sgn(t) < 0)
- return false;
- else
- return true;
- }
- void Graham(int n)
- {
- Point p;
- int k = 0;
- p = lis[0];
- for(int i = 1; i < n; i++)
- {
- if(p.y > lis[i].y || (p.y == lis[i].y && p.x > lis[i].x))
- p = lis[i],k = i;
- }
- swap(lis[0],lis[k]);
- sort(lis+1,lis+n,cmp);
- if(n == 1)
- {
- top = 1;
- Stack[0] = 0;
- return ;
- }
- if(n == 2)
- {
- top = 2,Stack[0] = 0,Stack[1] = 1;
- return ;
- }
- Stack[0] = 0;
- Stack[1] = 1;
- top = 2;
- for(int i = 2; i < n; i++)
- {
- while(top > 1 && sgn((lis[Stack[top-1]]-lis[Stack[top-2]])
- ^ (lis[i]-lis[Stack[top-2]])) <= 0)
- top --;
- Stack[top++] = i;
- }
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- int n;
- double len;
- while(scanf("%d%lf",&n,&len) != EOF)
- {
- for(int i = 0; i < n; i++)
- {
- scanf("%lf%lf",&lis[i].x,&lis[i].y);
- }
- Graham(n);
- double ans = 0;
- //cout << top <<endl;
- for(int i = 0; i < top; i++)
- {
- if(i == top-1)
- ans += dist(lis[Stack[i]],lis[Stack[0]]);
- else
- ans += dist(lis[Stack[i]],lis[Stack[i+1]]);
- }
- ans += 2*PI*len;
- printf("%.0f\n",ans);
- }
- return 0;
- }
poj 1113 凸包周长的更多相关文章
- POJ 1113 凸包模板题
上模板. #include <cstdio> #include <cstring> #include <iostream> #include <algorit ...
- poj 1113 凸包
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- POJ 1113 Wall【凸包周长】
题目: http://poj.org/problem?id=1113 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- poj 1113:Wall(计算几何,求凸包周长)
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28462 Accepted: 9498 Description ...
- POJ 1113 Wall(Graham求凸包周长)
题目链接 题意 : 求凸包周长+一个完整的圆周长. 因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆. 思路 : 求出凸包来,然后加上圆的周长 #include <stdi ...
- 计算几何--求凸包模板--Graham算法--poj 1113
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28157 Accepted: 9401 Description ...
- POJ 1113 Wall 凸包 裸
LINK 题意:给出一个简单几何,问与其边距离长为L的几何图形的周长. 思路:求一个几何图形的最小外接几何,就是求凸包,距离为L相当于再多增加上一个圆的周长(因为只有四个角).看了黑书使用graham ...
- poj 1113 Wall 凸包的应用
题目链接:poj 1113 单调链凸包小结 题解:本题用到的依然是凸包来求,最短的周长,只是多加了一个圆的长度而已,套用模板,就能搞定: AC代码: #include<iostream> ...
- POJ 2187 Beauty Contest【凸包周长】
题目: http://poj.org/problem?id=1113 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
随机推荐
- 安装QT5.02
1.下载QT5 SDK 下载地址:http://qt-project.org/downloads. 2.安装QT5 下载完后,假设放在Download/,切换到该目录,输入:./qt-linux-op ...
- 用python实现简单购物车功能
all_asset = 0 i1 = input("请输入总资产:") all_asset = int(i1) goods = [ {'name':'电脑','price':199 ...
- Count on a tree
bzoj 2588: Spoj 10628. Count on a tree http://www.lydsy.com/JudgeOnline/problem.php?id=2588 Descrip ...
- 在360、UC等浏览器,img不加载原因
问题:图片在360浏览器不被加载,在UC浏览器强制不显示. 前言不多说,直接上图. 360浏览器显示情况: UC浏览器显示情况: 由以上两张截图可以看到,在360浏览器,banner图片处根本没有加载 ...
- ajax实现无刷新分页效果
基于jquery.pagination.js实现的无刷新加载分页数据效果. 简介与说明 * 该插件为Ajax分页插件,一次性加载数据,故分页切换时无刷新与延迟.如果数据量较大,加载会比较慢. * 分页 ...
- 根据抽象工厂实现的DBHelpers类
public abstract class DBHelper { public static SqlConnection conn = new SqlConnection("server=l ...
- jquery 实时监听输入框值变化方法
$('.offers-number').bind('input propertychange', function (a, b) { var value = $(this).val() if (!va ...
- Windows用户模式下注入方式总结
注入技术在病毒木马.游戏.打补丁等编程中应用很广泛,学习该技术不仅能帮助理解Windows工作原理,还能对病毒木马技术手段有更加深刻的理解,下面我们了解下各种注入方式吧. 一.DLL注入 在注入技术中 ...
- Apollo单向SSL认证(2)
一.生成ks和ts 二.连接测试 1.配置 2.测试
- Mosquito集群模式
参考链接: http://blog.csdn.net/z729685731/article/details/70142182 http://blog.csdn.net/yuhaiyang457288/ ...