【凸包构造】poj 1113 Wall
2015-10-01 19:46
351 查看
poj 1113 Wall
加粗
斜体
引用
插入链接
插入代码
插入图片
提升标题
有序列表
无序列表
横线
撤销
重做
http://poj.org/problem?id=1113
问题描述:凸包长度问题答案是凸包的长度+以l为半径的圆周长(围墙是一个圆角多边形,圆周的那部分之和为一个圆)
http://blog.csdn.net/zhengnanlee/article/details/9633357
思路
凸包构造+遍历求周长+圆周长参考代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<vector> #include<algorithm> #include<set> #include<sstream> #define eps 1e-9 #define pi acos(-1) using namespace std; typedef long long ll; const int _max = 1e3 + 10; int n,l; int dcmp(double x){ if(fabs(x)<eps) return 0;else return x < 0?-1:1; } struct point{ double x,y; }p[_max],res[_max]; bool mult(point sp,point ep,point op){ return (sp.x - op.x) * (ep.y - op.y) >= (ep.x - op.x) * (sp.y - op.y); } bool operator < (const point &l, const point &r){ return l.y < r.y ||(l.y == r.y && l.x < r.x); } double len(point a,point b){ return hypot(b.x-a.x,b.y-a.y); } int graham(point pnt[],int n, point res[]){//构造凸包 int i,len ,k = 0,top = 1; sort(pnt,pnt+n); if(n == 0)return 0; res[0] = pnt[0]; if(n == 1)return 1; res[1] = pnt[1]; if(n == 2)return 2; res[2] = pnt[2]; for(int i =2; i < n; ++ i){ while(top && mult(pnt[i],res[top],res[top-1])) top--; res[++top] = pnt[i]; } len = top; res[++top] = pnt[n - 2]; for(i = n - 3; i >= 0; -- i){ while(top!=len && mult(pnt[i],res[top],res[top-1])) top--; res[++top] = pnt[i]; } return top;//返回凸包中点的个数 } int main(){ #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif // ONLINE_JUDGE while(scanf("%d%d",&n,&l) == 2){ for(int i = 0; i < n; ++ i) scanf("%lf%lf",&p[i].x,&p[i].y); n = graham(p,n,res); double tar = 2 * pi * l; //圆的周长+凸包的周长 for(int i = 0; i < n; ++ i) tar+=len(res[i],res[(i+1)%n]); printf("%.0f\n",tar);//四舍五入 } return 0; }
加粗
Ctrl + B
斜体
Ctrl + I
引用
Ctrl + Q
插入链接
Ctrl + L
插入代码
Ctrl + K
插入图片
Ctrl + G
提升标题
Ctrl + H
有序列表
Ctrl + O
无序列表
Ctrl + U
横线
Ctrl + R
撤销
Ctrl + Z
重做
Ctrl + Y
相关文章推荐
- BZOJ2829信用卡凸包
- 凸包问题 hdu1392 Surround the Trees
- 【计算几何】POJ 1113
- [BZOJ1069][SCOI2007][凸包][旋转卡壳]最大土地面积
- 两个while循环求凸包 poj2187 poj1113
- [SHTSC 2012] 信用卡凸包
- bzoj-2300 防线修建
- HDU 4946 凸包 判重点 多校练习赛8 1002
- POJ 2187 Beauty Contest (凸包)
- POJ 1113 Wall (凸包)
- POJ 2187 —— 凸包 + 旋转卡壳 求多边形的直径
- HDU 4946 Area of Mushroom 凸包
- HDU2108-Shape of HDU
- 寻找凸包的Graham算法
- HDOJ1348凸包模版
- HDOJ1392凸包模版
- HDU/HDOJ2202凸包模版+枚举
- POJ2007 凸包
- POJ 1113 凸包模版题
- POJ 1228 凸包