poj 2187【旋转卡壳模板】
求平面最远点对
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=50005;
int n,w=1,top;
double ans;
struct dian
{
	double x,y;
	dian(double X=0,double Y=0)
	{
		x=X,y=Y;
	}
	dian operator + (const dian &a) const
	{
		return dian(x+a.x,y+a.y);
	}
	dian operator - (const dian &a) const
	{
		return dian(x-a.x,y-a.y);
	}
}p[N],s[N];
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
double dis(dian a,dian b)
{
	return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
double cj(dian a,dian b)
{
	return a.x*b.y-a.y*b.x;
}
bool cmp(const dian &a,const dian &b)
{
	int ar=cj(a-p[1],b-p[1]);
	return ar>0||(ar==0&&a.x<b.x);
}
double mj(dian a,dian b,dian c)
{
	return cj(b-a,c-a);
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++)
	{
		int x=read(),y=read();
		p[i]=dian(x,y);
		if(p[i].x<p[w].x||(p[i].x==p[w].x&&p[i].y<p[w].y))
			w=i;
	}
	swap(p[w],p[1]);
	sort(p+2,p+1+n,cmp);
	s[++top]=p[1],s[++top]=p[2];
	for(int i=3;i<=n;i++)
	{
		while(top>1&&cj(s[top]-p[i],s[top-1]-p[i])>=0)
			top--;
		s[++top]=p[i];
	}
	w=2;s[top+1]=s[1];
	for(int i=1;i<=top;i++)
	{
		while(cj((s[i]-s[w]),(s[i+1]-s[w]))<cj((s[i]-s[w+1]),(s[i+1]-s[w+1])))
			w=(w+1)>top?1:w+1;
		ans=max(ans,dis(s[w],s[i]));
	}
	printf("%.0f\n",ans);
	return 0;
}
												
											poj 2187【旋转卡壳模板】的更多相关文章
- Poj 2187 旋转卡壳
		
Poj 2187 旋转卡壳求解 传送门 旋转卡壳,是利用凸包性质来求解凸包最长点对的线性算法,我们逐渐改变每一次方向,然后枚举出这个方向上的踵点对(最远点对),类似于用游标卡尺卡着凸包旋转一周,答案就 ...
 - POJ 2187 旋转卡壳 + 水平序 Graham 扫描算法 + 运算符重载
		
水平序 Graham 扫描算法: 计算二维凸包的时候可以用到,Graham 扫描算法有水平序和极角序两种. 极角序算法能一次确定整个凸包, 但是计算极角需要用到三角函数,速度较慢,精度较差,特殊情况较 ...
 - poj 3608(旋转卡壳求解两凸包之间的最短距离)
		
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9768 Accepted: ...
 - poj 2079(旋转卡壳求解凸包内最大三角形面积)
		
Triangle Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 9060 Accepted: 2698 Descript ...
 - Bridge Across Islands POJ - 3608 旋转卡壳求凸包最近距离
		
\(\color{#0066ff}{题目描述}\) 几千年前,有一个小王国位于太平洋的中部.王国的领土由两个分离的岛屿组成.由于洋流的冲击,两个岛屿的形状都变成了凸多边形.王国的国王想建立一座桥来连接 ...
 - POJ 3608 旋转卡壳
		
思路: 旋转卡壳应用 注意点&边 边&边 点&点 三种情况 //By SiriusRen #include <cmath> #include <cstdi ...
 - poj 3608 旋转卡壳求不相交凸包最近距离;
		
题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...
 - POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
		
链接: http://poj.org/problem?id=2187 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
 - poj 2187 凸包加旋转卡壳算法
		
题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...
 
随机推荐
- SQL SERVER 2012 第五章 创建和修改数据表 の SQL SERVER中的对象名
			
[ServerName.[DataBaseName.[SchemeName.]]]ObjectName 服务器名,数据库名,模式名,对象名 其中模式是一个新出的坑爹的东西.
 - python学习之-- shutil模块
			
shutil 模块功能:文件/文件夹的复制,压缩处理模块shutil.copyfileobj(fsrc,fdst[,length]):将文件内容拷贝到另一个文件中,也可以是部分内容举例:文件复制 im ...
 - Codeforces 653C Bear and Up-Down【暴力】
			
题目链接: http://codeforces.com/problemset/problem/653/C 题意: 给定序列,偶数位的数字比两边都大,则成为nice,只可以交换两个数字,问有多少种交换方 ...
 - hdu 3237
			
dp 状态压缩 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> ...
 - Spring4MVC 请求参数映射和Content-type
			
目录 前言 不使用注解(不传则为null) 基本数据类型和日期类型 自定义类型POJO @PathVariable注解 @RequestParam 注解 @RequestBody注解 复杂对象Arra ...
 - CommonTabLayout+ViewPager快速完成APP首页搭建
			
款APP开始的时候往往少不了多页面的切换,这就涉及到viewpager的使用,以前往往用Google自带的效果去实现,比较麻烦不说,后面做出来的效果还不如人意. 下面就利用CommonTabLayou ...
 - 浏览器websocket
			
使用浏览器,PHP 来构建的应用,发现都是每次浏览器发送一次http 请求,PHP 回一个响应. 这样,后端的PHP 在处理多次http请求是,每次都是不同的进程在处理. 这就加大了开销, 而且,PH ...
 - 一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法
			
有一段时间没有瞎折腾了. 这周一刚上班萌主过来反映说:微信里面打开聚客宝.分享功能是能够的(这里是用微信自身的js-sdk实现的).可是在android应用里面打开点击就没反应了:接下来狡猾的丁丁在产 ...
 - Guava ---- Concurrent并发
			
Guava在JDK1.5的基础上, 对并发包进行扩展. 有一些是易用性的扩展(如Monitor). 有一些是功能的完好(如ListenableFuture). 再加上一些函数式编程的特性, 使并发包的 ...
 - SQL 约束(Constraints)
			
SQL 约束(Constraints) SQL 约束(Constraints) SQL 约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表时规定(通过 CR ...