【凸包构造】poj 1113 Wall
来源:互联网 发布:打鱼软件开发 编辑:程序博客网 时间:2024/06/03 17:09
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
0 0
- 【凸包构造】poj 1113 Wall
- POJ 1113 Wall 凸包
- POJ 1113 Wall (凸包)
- poj 1113 Wall--凸包
- poj 1113 Wall 凸包
- poj 1113 Wall-----凸包
- [poj 1113]Wall[凸包]
- poj 1113 Wall 凸包
- POJ 1113 Wall (凸包)
- POJ 1113 Wall 凸包
- poj 1113 Wall (凸包)
- POJ 1113 Wall (凸包)
- Wall(凸包POJ 1113)
- 【POJ 1113】 Wall (凸包)
- poj 1113 Wall 凸包
- POJ 1113 Wall (凸包)
- Poj 1113 Wall [凸包]
- POJ 1113 WALL(凸包-计算几何)
- LightOJ 1213 Fantasy of a Summation
- 迷宫求解(使用队列
- linux个人学习笔记---ubuntu14.10删除播放器历史记录命令
- ios浅谈关于nil和 NIL区别及相关问题
- 原码, 反码, 补码 详解
- 【凸包构造】poj 1113 Wall
- 用一张图说明负载均衡和服务器集群
- HDU5482给大小为k的字符集,求长度为n且有m个非空字串的串数目,构造
- html5 storage
- PHP CLI模式下的多进程应用
- Java中判断字符串是否为数字的五种方法
- c++ 读写Excel及数据导入SQLServer
- C语言及程序设计.第二十三课.项目6.前导0的数字
- HDU 3721 - Building Roads(DFS`树的直径)