poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)
http://poj.org/problem?id=2187
题意:
最长的点对近距离的平方:
题解:
旋转卡壳法, 要注意的地方是,有 所有点共线的情况,所以,(求凸包时)要将,共线点去出 ;
2 #include<cstring>
3 #include<cmath>
4 #include<iostream>
5 #include<algorithm>
6 #include<set>
7 #include<map>
8 #include<queue>
9 #include<vector>
10 #include<string>
11 #define Min(a,b) a<b?a:b
12 #define Max(a,b) a>b?a:b
13 #define CL(a,num) memset(a,num,sizeof(a));
14 #define maxn 50100
15 #define eps 1e-12
16 #define inf 100000000
17 #define mx 1<<60
18 #define ll __int64
19 const double pi = acos(-1.0);
20 using namespace std;
21 struct point
22 {
23 double x,y;
24 }p[maxn];
25 point stack[maxn];
26 int dblcmp(double x)
27 {
28 if(fabs(x) < eps) return 0;
29 if(x < 0) return -1;
30 else return 1;
31 }
32 double det(double x1,double y1,double x2,double y2)
33 {
34 return x1*y2 - x2*y1 ;
35 }
36 double cross(point a, point b, point c)
37 {
38 return det(b.x - a.x, b.y - a.y, c.x - a.x, c.y - a.y);
39 }
40 int cmp(point a,point b)
41 {
42 if(a.y != b.y) return a.y < b.y;
43 else return a.x < b.x;
44 }
45 int top ,n;
46 void graham()
47 {
48
49 int i,len;
50 top = 0;
51 sort(p,p+n,cmp);
52
53 if(n == 0) return ;
54 if(n == 1) return ;
55 stack[top++] = p[0];
56 stack[top++] = p[1];
57 for(i = 2 ;i<n;i++)//求右链
58 {
59 while(top > 1&& cross(stack[top - 1],stack[top - 2],p[i]) >= 0) top--;
60
61 stack[top++] = p[i];
62 }
63
64 //dblcmp(cross(p[stack[top - 1]],p[stack[top - 2]],p[i])) 可以直接是 cross
65 len = top ;
66
67 for(i = n - 2;i >= 0;i--)//求左链
68 {
69 while(top > len && cross(stack[top - 1],stack[top - 2],p[i]) >= 0)top--;
70 stack[top++] = p[i];
71
72 }
73 top--;//第一个点入栈两次 所以 减 1
74
75 }
76 double dis(point a,point b)
77 {
78 double x1 = a.x;
79 double y1 = a.y;
80 double x2 = b.x;
81 double y2 = b.y;
82 return (x1 - x2)*(x1 - x2)+ (y1 - y2)*(y1 - y2);
83 }
84 double rotating_calipers(point stack[],int top)
85 {
86 int i;
87 int q = 1;
88 double ans = 0;
89 stack[top] = stack[0] ;
90
91
92 for(i = 0;i < top;i++ )
93 {
94 while(cross(stack[i+1],stack[q+1],stack[i]) > cross(stack[i + 1],stack[q],stack[i]))
95 q = (q+1)%top;
96
97
98
99 ans = max(ans,max(dis(stack[i],stack[q]),dis(stack[i+1],stack[q+1])));
100
101 }
102 return ans ;
103 }
104 int main()
105 {
106
107
108 int i,s,j;
109 //freopen("data.txt","r",stdin);
110 while(scanf("%d",&n)!=EOF)
111 {
112 for(i = 0;i< n;i++)
113 {
114 scanf("%lf%lf",&p[i].x,&p[i].y);
115 }
116 graham() ;
117
118 double ans = rotating_calipers(stack,top);
119 printf("%.0lf\n",ans);
120
121
122 }
123 }
转载于:https://www.cnblogs.com/acSzz/archive/2012/08/28/2660509.html
poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)相关推荐
- poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
1 /* poj 2187 Beauty Contest 2 凸包:寻找每两点之间距离的最大值 3 这个最大值一定是在凸包的边缘上的! 4 5 求凸包的算法: Andrew算法! 6 */ 7 #in ...
- POJ - 2187 Beauty Contest(最远点对)
http://poj.org/problem?id=2187 题意 给n个坐标,求最远点对的距离平方值. 分析 模板题,旋转卡壳求求两点间距离平方的最大值. #include<iostream& ...
- POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))
链接:https://vjudge.net/problem/POJ-2187 题意:求求距离最远点对. 思路:肯定为凸包上的点,可枚举,也可根据凸包性质旋转卡壳求对踵点. 参考博客: https:// ...
- POJ 2187 Beauty Contest( 凸包求最远点对 )
链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...
- poj 2187 Beauty Contest
http://poj.org/problem?id=2187 题意:给你n个坐标点 ,求两点之间的最大距离的平方 题解:求出凸包,枚举顶点两两之间的距离 #include<cstdio> ...
- [Poj 2187] 计算几何之凸包(二) {更高效的算法}
{ 承上一节 继续介绍点集的凸包 (下文中所有凸包 若不做特殊说明均指点集的凸包) 这一节介绍相比更高效的算法 } ========================================= ...
- POJ2187 Beauty Contest(凸包+对踵点对求解)
思路:求凸包,然后旋转卡壳对最远点对求解,注意凸包退化的情况 #include<cstdio> #include<cstring> #include<cmath> ...
- 凸包 初学 Andrew 和 Melkman (模板) 旋转卡(qia)壳(ke)
凸包初学 定义: 给你n个散落的点,让你求出最小的凸多边形将所有的点包括起来,或者点在边上. 稳定凸包,不能再扩充,每条边都用3个点 必备知识: 会用叉积判断点与直线的关系(这里指 点在线的那一边, ...
- 旋转卡壳凸包(不用一下子就学完所有)
目录 前言 参考博客 前置知识 1.极角排序 2.凸包(默认逆时针) 3.对踵点 旋转卡壳能解决的各类问题 1.计算距离 1.1凸多边形直径 1.2凸多边形宽 1.3凸多边形间最大距离 1.4凸多边形 ...
最新文章
- java 登录按钮响应数据库_用户登录功能的实现—从前端到后台(包括数据库)...
- PostgreSQL字符串截取替换
- ckeditor和ckfinder的使用
- 配置云服务器 FTP 服务
- 计算机表演赛新疆赛区,【图】第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区总决赛圆满结束_乌鲁木齐教育信息网...
- 【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服务器解决方案
- 【Java】浅谈JavaDoc文档注释
- EXTRONICS推出IRFID500便携式UHF RFID读写器
- 格式化字符串漏洞利用 二、格式化函数
- UIWebView 真机iOS 8.x系统上报错
- CString类简介
- 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
- Java练习例子:计算圆柱体积
- WPS使用VB批量将多个sheet单独存储为xls文件
- Lync/Skype脱机地址簿不更新
- 【回炉重造】带你搞懂什么是机器学习?
- list过滤重复数据java_java中List去除重复数据的五种方式
- 世界崩塌前要写下游戏心得(持续更新)
- 计算机网络体系结构整理-第二单元IP技术
- 软件测试人还知道大名鼎鼎的compuware性能调优工具吗?该公司撤离中国!