POJ 2187 /// 凸包入门 旋转卡壳
题目大意:
求最远点对距离
求凸包上的最远点对
挑战263页
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
const int N=5e5+;
const double eps=1e-; int n;
double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
}
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){};
P operator - (P p) {
return P(add(x,-p.x),add(y,-p.y)); };
P operator + (P p) {
return P(add(x,p.x),add(y,p.y)); };
P operator * (double d) {
return P(x*d,y*d); };
double dot(P p) {
return add(x*p.x,y*p.y); };
double det(P p) {
return add(x*p.y,-y*p.x); };
}p[N]; bool cmp(const P &a,const P &b){
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
vector <P> andrew()
{
sort(p,p+n,cmp);
int k=;
vector <P> q(n*);
for(int i=;i<n;i++) {
while(k> && (q[k-]-q[k-]).det(p[i]-q[k-])<=) k--;
// >0时q[k-1]才位于线段q[k-2]p[i]的左侧 形成下凸
q[k++]=p[i];
} /// 求下凸
for(int i=n-,t=k;i>=;i--) {
while(k>t && (q[k-]-q[k-]).det(p[i]-q[k-])<=) k--;
q[k++]=p[i];
} /// 求上凸
q.resize(k-);
return q;
} double dist(P a,P b) {
return (a-b).dot(a-b);
} // 点ab距离的平方 void solve()
{
vector <P> q=andrew();
int n=q.size();
if(n==) {
printf("%.0f\n",dist(q[],q[]));
return ;
} int i=, j=;
for(int k=;k<n;k++) {
if(!cmp(q[i],q[k])) i=k; // 凸包的最左下
if(cmp(q[j],q[k])) j=k; // 凸包的最右上
} double ans=;
int si=i, sj=j;
while(i!=sj || j!=si) { // 转半圈就能判断到所有对踵点对
ans=max(ans,dist(q[i],q[j]));
/*判断旋转
<0两者未达到平行 那么先转i更易达到平行
>0两者超过平行 那么转j更易达到平行
*/
if((q[(i+)%n]-q[i]).det(q[(j+)%n]-q[j])<)
i=(i+)%n;
else j=(j+)%n;
}
printf("%.0f\n",ans);
} int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
solve(); return ;
}
POJ 2187 /// 凸包入门 旋转卡壳的更多相关文章
- poj 2187 凸包加旋转卡壳算法
题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...
- poj 2187 Beauty Contest , 旋转卡壳求凸包的直径的平方
旋转卡壳求凸包的直径的平方 板子题 #include<cstdio> #include<vector> #include<cmath> #include<al ...
- poj 2187 Beauty Contest——旋转卡壳
题目:http://poj.org/problem?id=2187 学习材料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...
- poj 2187:Beauty Contest(旋转卡壳)
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 32708 Accepted: 10156 Description Bes ...
- poj 2187 Beauty Contest —— 旋转卡壳
题目:http://poj.org/problem?id=2187 学习资料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...
- POJ 2187 Beauty Contest(凸包,旋转卡壳)
题面 Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, earning the ...
- 【BZOJ1185】[HNOI2007]最小矩形覆盖(凸包,旋转卡壳)
[BZOJ1185][HNOI2007]最小矩形覆盖(凸包,旋转卡壳) 题面 BZOJ 洛谷 题解 最小的矩形一定存在一条边在凸包上,那么枚举这条边,我们还差三个点,即距离当前边的最远点,以及做这条边 ...
- 算法复习——凸包加旋转卡壳(poj2187)
题目: Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest ...
- Poj 2187 凸包模板求解
Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...
随机推荐
- VS 2015 Download
企业版:http://download.microsoft.com/download/B/8/F/B8F1470D-2396-4E7A-83F5-AC09154EB925/vs2015.ent_chs ...
- bzoj1294题解
[题意分析] 给定一张网格图,每个网格可能是普通点.特殊点或障碍点,每个特殊点有一个分值.要求选定一条只经过普通点的可重复回路,使回路内部的特殊点分值和最大. [算法分析] 引理:射线法 对于平面内任 ...
- 回滚树形dp(按dfs序dp)——hdu6035
本题前面的操作别的博客里都有.难点在于颜色ci的贡献,如何一次dfs求出答案 先来考虑如何在一次dfs中单独对颜色i进行计算 用遍历dfs序的方式,在深搜过程中,碰到带有颜色 i 的点 u,u每个颜色 ...
- 01二重退背包+组合数学——cf1111d
退背包进阶,还是挺难想的 /* dp1[k]表示取到体积k的方案数 dp2[i][j][k]表示左侧必选ij的情况下,取到体积k的方案数 dp2[i][j][k]=dp1[k]-左侧不选ij的方案数 ...
- Flume详解
Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据.它具有基于流数据流的简单灵活的架构.它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强大的容错性.它使用简单的可扩 ...
- 关于group by的用法
重新回顾并理解group by. 首先设计一张表,表名为test 然后执行以下SQL语句: select name from test group by name 获得执行结果: 可是为了能够更好的理 ...
- web应用本质
web应用的本质 在之前学习的socket网络编程中,是基于: 架构:C/S架构 协议:TCP/UDP协议 运行在OSI七层模型中的传输层 那么在web应用中,是基于: 架构:B/S架构 协议:Htt ...
- Hadoop国内主要发行版本
Hadoop主要版本 目前国内使用的不收费的Hadoop版本主要包括以下3个: Apache hadoop Cloudera的CDH Hortonworks版本(Hortonworks Data Pl ...
- 剑指offer——25链表中环的入口节点
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题解: 使用快慢指针即可,若快慢指针会相遇,则有环,否则快指针先到空节点: 此时,快指针从此处一次移一步遍历, ...
- 利用DOM节点找对象和直接在标签属性中调函数传值this的书写区别
同样的功能,不同的书写格式. 1.个人觉得比较繁琐的写法,但是比较常见,特别是在大项目的时候常用的就是这种方法: <div id="mouse" onmouseover=&q ...