http://poj.org/problem?id=2187

题目大意:给n个点,求点对最大距离的平方。

————————————————————

很容易证明最大距离的点对在最大凸包上。

那么就是旋转卡壳的裸题了。

旋转卡壳要不要写讲解呢……

#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct Point{
int x,y;
Point(int x0=,int y0=){x=x0,y=y0;}
}; int dis(Point a,Point b){//求两点距离平方
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
} typedef Point Vector;
Vector operator +(Point a,Point b){return Vector(a.x+b.x,a.y+b.y);}
Vector operator -(Point a,Point b){return Vector(a.x-b.x,a.y-b.y);}
Vector operator *(Point a,int k){return Vector(a.x*k,a.y*k);}
Vector operator /(Point a,int k){return Vector(a.x/k,a.y/k);} int Dot(Vector a,Vector b){//求点积
return a.x*b.x+a.y*b.y;
}
int Cross(Vector a,Vector b){//求叉积
return a.x*b.y-b.x*a.y;
}
int Cross(Point sp,Point ep,Point op){//得到sp-op和ep-op的叉积
return (sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y);
} Point p[N],q[N];
int n,k,m;
inline bool cmp(int u,int v){
int det=Cross(p[u],p[v],p[]);
if(det!=)return det>;
return dis(p[],p[u])<dis(p[],p[v]);
}
void graham(){
int id=;
for(int i=;i<=n;i++)
if(p[i].x<p[id].x||(p[i].x==p[id].x&&p[i].y<p[id].y))
id=i;
if(id!=)swap(p[],p[id]); static int per[N];
for(int i=;i<=n;i++)per[i]=i;
sort(per+,per+n+,cmp); q[++m]=p[];
for(int i=;i<=n;i++){
int j=per[i];
while(m>=&&Cross(p[j],q[m],q[m-])>=)m--;
q[++m]=p[j];
}
return;
}
int calliper(){
if(m==)return dis(q[],q[]);
q[m+]=q[];
int res=;
for(int i=,j=;i<=m;i++){
while(Cross(q[i+],q[j],q[i])<Cross(q[i+],q[j+],q[i])){
j++;if(j>m)j=;
}
res=max(res,dis(q[i],q[j]));
}
return res;
}
int main(){
n=read();
for(int i=;i<=n;i++)p[i].x=read(),p[i].y=read();
graham();
printf("%d\n",calliper());
return ;
}

最新文章

  1. 如何自己编写Makefile
  2. ASP.NET MVC+Entity Framework 访问数据库
  3. 【C语言学习笔记】存储类、链接和内存管理
  4. vim环境设置和自动对齐
  5. charles使用教程指南(抓包工具)
  6. TP中不区分大小写__APP__和__URL__的注意事项
  7. C#核心基础--类(2)
  8. problem 1 -- Two sum
  9. 理解阻止浏览器默认事件和事件冒泡cancelBubble
  10. tudou link
  11. 半平面交总结and模板
  12. 运维老鸟教你安装centos6.5如何选择安装包
  13. 网络接口配置--Bonding
  14. OpenCV学习1-----打开摄像头并在画面上添加水印
  15. SAS-决策树模型
  16. centos7 根分区扩容
  17. C++简单输入输出-计算火车运行时间
  18. C#把Xml转换为DataSet的两种方法
  19. CentOS 安装codeblocks
  20. 前端ajax传数据成功发送,但后端接收不到

热门文章

  1. 面试遇到的订单表sql的解决方案
  2. WPF Issues
  3. 【SpringCloud】第六篇: 分布式配置中心(Spring Cloud Config)
  4. C 计算时间差
  5. lintcode539 移动零
  6. 【cookie接口】- jmeter - (请求提示no cookie)
  7. 【QT】宏
  8. 从零开始的Python学习Episode 6——字符串操作
  9. js经典试题之原型与继承
  10. 蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)(转载)