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 < ...
随机推荐
- DOM——创建元素的三种方式
document.write() document.write('新设置的内容<p>标签也可以生成</p>'); innerHTML var box = document. ...
- NX二次开发-UFUN适应窗口UF_VIEW_fit_view
NX9+VS2012 #include <uf.h> #include <uf_view.h> #include <uf_modl.h> UF_initialize ...
- px2rem-loader(Vue:将px转化为rem,适配移动端)
转载:https://www.cnblogs.com/WQLong/p/7798822.html 1.下载lib-flexible 使用的是vue-cli+webpack,通过npm来安装的 npm ...
- 开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误
开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误, 调试后发现是由于写的SQL语句里列的数目和后面的值 ...
- 1.1两个char类型数据相加后,转化为int类型
#include<stdio.h> main() { char a = 127; char i=0; char ai=0; ai= a+i; printf("size short ...
- linux就该这么学--资料整理--持续更新
基础命令 服务管理 systemctl redhat7 systemctl start foo.service 启动服务 systemctl restart foo.service 重启服务 syst ...
- 剑指offer——15剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...
- CSV导入到hive中,处理分号问题
1.导入的原数据 103744;545479945;2017.05.17 06:41:08;sell;eurusd_;0.10;1.11080;1.11280;1.10880;1.11081;0.00 ...
- react添加多个域名proxy代理,跨域
在package.json中加入如下: { "name": "demo", "version": "0.1.0", &q ...
- C盘清理记——罪魁Visual Studio
话不啰嗦,单刀直入:在C:\ProgramData\Microsoft Visual Studio文件夹下,VS会自动记录IntelliTrace File,久而久之,会无限消耗磁盘空间,直接到塞满C ...