【poj2187】最远点对(勉强凑数)
题目简述
输入n个点,及其坐标,n<=50000,所有坐标都是不超过10000的整数组成,没有重点。
问最远点对间的距离的平方是多少
题解
这是一道旋转卡壳的裸题
我们要求这个多边形的直径,这可怎么办呢
首先,最远点对一定在凸包上,我们考虑这样一个凸包
显然的,卡在两个点上,一定可以转化成卡在一个边和一个点上
更显然的,如果卡在一条边上和一个点上,那么这个点一定离这个边最远
那么,这个点和这条边组成的三角形一定是包括这条边的三角形中最大的
再之,假定点i和点i+1卡到了点j
那么随着i增加,j也增加
根据这个单调性,我们可以计算出每条边对应的点了
那么直径也就等于边的端点到对应的点的距离
注意边界即可!

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef double db;
const int N=;
struct P{int x,y;} a[N],s[N];
int n,top=,ans=;
il P operator-(P a,P b){
return (P){a.x-b.x,a.y-b.y};
}
il int operator*(P a,P b){
return a.x*b.y-a.y*b.x;
}
il int dis(P a){
return a.x*a.x+a.y*a.y;
}
il bool cmp(P x,P y){
if(abs((x-a[])*(y-a[]))>) return (x-a[])*(y-a[])>;
return dis(x-a[])<dis(y-a[]);
}
il int S(P a,P b,P c){
return abs((a-b)*(a-c))/;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=;i<=n;i++)
if(a[i].y<a[].y||(a[i].y==a[].y&&a[i].x<a[].x))
swap(a[],a[i]);
sort(a+,a+n+,cmp);
top=;s[]=a[];s[]=a[];
for(int i=;i<=n;i++){
while(top>&&(a[i]-s[top-])*(s[top]-s[top-])>=) top--;
s[++top]=a[i];
}
for(int i=;i<top;i++)
s[i]=s[i+];
n=top;
for(int i=,j=;i<n;i++){
while(S(s[i],s[(i+)%n],s[j])<S(s[i],s[(i+)%n],s[(j+)%n])) j=(j+)%n;
ans=max(dis(s[i]-s[j]),ans);
}
printf("%d",ans);
return ;
}
【poj2187】最远点对(勉强凑数)的更多相关文章
- [POJ2187][BZOJ1069]旋转卡壳
旋转卡壳 到现在依然不确定要怎么读... 以最远点对问题为例,枚举凸包上的两个点是最简单的想法,时间复杂度O(n2) 我们想象用两条平行线卡着这个凸包,当其中一个向某个方向旋转的时候另一个显然也是朝同 ...
- POJ-2187 Beauty Contest,旋转卡壳求解平面最远点对!
凸包(旋转卡壳) 大概理解了凸包A了两道模板题之后在去吃饭的路上想了想什么叫旋转卡壳呢?回来无聊就搜了一下,结果发现其范围真广. 凸包: 凸包就是给定平面图上的一些点集(二维图包),然后求点集组成的 ...
- poj2187凸包最远点对
暴力过了 #include<map> #include<set> #include<cmath> #include<queue> #include< ...
- poj2187 Beauty Contest(旋转卡壳)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Beauty Contest Time Limit: 3000MS Memor ...
- POJ 2187 Beauty Contest( 凸包求最远点对 )
链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...
- STM32F412应用开发笔记之四:与远红外炭氢传感器通讯
远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,TTL电平.所以我们需要用到UART口来实现与远红外炭氢传感器的通讯. 远红外传感器就是这个样子的: 再来一张进气和 ...
- UVALive 4728 Squares (平面最远点对)
题意:n个平行于坐标轴的正方形,求出最远点对的平方 题解:首先求出凸包,可以证明最远点对一定是凸包上的点对,接着可以证明最远点对(每个点的对踵点)一定只有3*n/2对 接着使用旋转卡壳找到最远点对,但 ...
- Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...
- bzoj 2739 最远点
Description 给你一个N个点的凸多边形,求离每一个点最远的点. Input 本题有多组数据,第一行一个数T,表示数据组数. 每组数据第一行一个数N,表示凸多边形点的个数,接下来N对数,依次表 ...
随机推荐
- 页签中加按钮 odoo里面
<notebook> <page string="订"> <field name="line_id" > <tree ...
- 查看历史命令 history
生产上有文件被清空了,想查查是谁操作的? 通过history查看历史命令: $history |more 也可以通过文件查看历史命令: $vi ~/.bash_history 只显示历史命令,像查一查 ...
- 【LeetCode148】Sort List★★bug
1.题目描述: 2.解题思路: 本题是要堆一个链表进行排序,并且要求时间复杂度为 O(n log n).很明显,要用到分治的思想,用二分法进行归并排序:找到链表的middle节点,然后递归对前半部分和 ...
- Eclipse安装Git插件(在线和离线)
在线安装: help-->install new software-->add location就是安装的地址:http://download.eclipse.org/egit/updat ...
- 【第十一课】Tomcat原理解析【转】
目录 一.Tomcat顶层架构 二.Tomcat顶层架构小结: 三.Connector和Container的微妙关系 四.Connector架构分析 五.Container架构分析 六.Contain ...
- [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]
题意 给你 \(n\) 和 \(k\) ,问能否用 \(k\) 的所有 \(>1\) 的因子凑出 \(n\) .多组数据,但保证不同的 \(k\) 不超过 50 个. \(n\leq 10^{1 ...
- Security5:授予权限
SQL Server授予用户访问对象的权限,通常的模式是:Grants permissions on a securable to a principal(user or login),也就是说,授予 ...
- REST-framework快速构建API--四部曲
代码目录结构: 一.使用原生APIView 使用rest-framework原生的APIView实现过程: 以url(r'^books/$', views.BookView.as_view(),nam ...
- JNI探秘-----FileInputStream的read方法详解
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章我们已经分析过File ...
- 大厂面试官:Java工程师的“十项全能”
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...