POJ(2187)用凸包求最远点对
Beauty Contest
http://poj.org/problem?id=2187
题目描述:输入n对整数点,求最距离远的点对,输出他们距离的平方和
算法:拿到这个题,最朴素的想法就是用2层循环遍历所有的点对,但这样可能会超时。由于距离最远的点对必定在点集的凸包的顶点上,所以只用遍历凸包上的点对就行。这样就把可能存在的大量的点给排除。哈哈~~~还是凸包。
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
struct Node
{
int x,y;
Node operator-(Node &node)
{
Node new_node;
new_node.x=x-node.x;
new_node.y=y-node.y;
return new_node;
}
};
vector<Node> p,s; //p存放所有顶点,s存放凸包顶点,s模拟栈
const double eps=10e-;
int squared_distance(Node &a,Node &b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
} double cross(Node vec1,Node vec2)
{
return (double)(vec1.x*vec2.y-vec1.y*vec2.x);
}
bool cmp(Node &a,Node &b)
{
Node vec1=a-p[];
Node vec2=b-p[];
double temp=cross(vec1,vec2);
if(temp>eps)
return true;
else if(temp<eps)
return false;
else
{
if(squared_distance(a,p[])<squared_distance(b,p[]))
return true;
else
return false;
}
}
void swap(Node &a,Node &b)
{
Node temp;
temp=a;
a=b;
b=temp;
}
int lowleft(vector<Node> &p)
{
int len=p.size();
int min_x=p[].x,min_y=p[].y;
int k=;
for(int i=;i<len;i++)
{
if(p[i].y<min_y)
{
min_x=p[i].x;
min_y=p[i].y;
k=i;
}
else if(p[i].y==min_y&&p[i].x<min_x)
{
min_x=p[i].x;
k=i;
}
}
return k;
}
void graham(vector<Node> &p)
{
int k=lowleft(p);
swap(p[],p[k]);
sort(p.begin()+,p.end(),cmp);
p.push_back(p[]); s.push_back(p[]);
s.push_back(p[]); int top=;
int len=p.size();
for(int i=;i<len;i++)
{
while(top>=&&cross(s[top]-s[top-],p[i]-s[top])<)
{
s.pop_back();
top--;
}
s.push_back(p[i]);
top++;
}
}
int main()
{
int n;
while(cin>>n)
{
Node temp;
p.clear();
s.clear();
for(int i=;i<n;i++)
{
cin>>temp.x>>temp.y;
p.push_back(temp);
}
graham(p);
int max=;
int len=s.size()-;//p的最后一个元素的值是p[0]遍历
for(int i=;i<len-;i++)
{
for(int j=i+;j<len;j++)
{
int d=squared_distance(s[i],s[j]);
if(d>max)
max=d;
}
}
cout<<max<<endl;
}
return ;
}
POJ(2187)用凸包求最远点对的更多相关文章
- Beauty Contest(凸包求最远点)
http://poj.org/problem?id=2187 题意:求凸包上最远点距离的平方 思路:开始用旋转卡壳求的最远点,WA,改了好久..后来又改成枚举凸包上的点..AC了.. #include ...
- POJ - 2187 Beauty Contest(最远点对)
http://poj.org/problem?id=2187 题意 给n个坐标,求最远点对的距离平方值. 分析 模板题,旋转卡壳求求两点间距离平方的最大值. #include<iostream& ...
- poj 2187 Beauty Contest(平面最远点)
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 24431 Accepted: 7459 D ...
- POJ 2187 Beauty Contest( 凸包求最远点对 )
链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...
- POJ 3348 Cows 凸包 求面积
LINK 题意:给出点集,求凸包的面积 思路:主要是求面积的考察,固定一个点顺序枚举两个点叉积求三角形面积和除2即可 /** @Date : 2017-07-19 16:07:11 * @FileNa ...
- POJ 1113 Wall 凸包求周长
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26286 Accepted: 8760 Description ...
- poj 3348 Cows 凸包 求多边形面积 计算几何 难度:0 Source:CCC207
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7038 Accepted: 3242 Description ...
- poj 2187 Beauty Contest 凸包模板+求最远点对
题目链接 题意:给你n个点的坐标,n<=50000,求最远点对 #include <iostream> #include <cstdio> #include <cs ...
- POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
链接: http://poj.org/problem?id=2187 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
随机推荐
- out.print()和response.getWriter().write()区别
1.print()和write()区别: write():表示的是仅支持输入字符类型数据,字符,字符数组和字符串等, print():表示的是将各种数据类型(包括object)的数据通过默认编码换成b ...
- Mybatis原理分析之一:从JDBC到Mybatis
1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...
- Zedboard安装桌面系统ubuntu及opencv(1)
最近一直在搞板子,想帮Zedboard安装一个opencv谁知道困难重重,而且网络几乎没有任何资料可以参考,只有陆佳华的<嵌入式软硬件协同设计实战指南>可以参考. 但是这本书讲得不清不楚, ...
- vs2012 发布网站时,发布目录为空
当我使用Release Any CPU时为空 使用Release X86就正常发布了 奇怪. 之后再切换回 Release Any CPU时正常发布. 在生成时可以尝试设置好生成配置,先生成,再发布.
- 传入url地址请求服务器api,浏览器显示图片
@RequestMapping("/proxyImage") public void proxyImage(HttpServletRequest request, HttpServ ...
- 关于Maven项目
用maven 工程搭建项目,在搭建好之后,运行时却抛出了这样的错误: Error configuring application listener of class org.springframew ...
- 基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例
简介(摘自baidu) 测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法.它要求在编写某个功能的代码之前先编写测试代码,然 ...
- Conway's law(康威定律)
Mel Conway 康威在加利福尼亚理工学院获得物理学硕士学位,在凯斯西储大学获得数学博士学位.毕业之后,他参与了很多知名的软件项目,如 Pascal 编辑器.在他的职业生涯中,康威观察到一个现象 ...
- 【转载】windows平台安装nodejs过程
第一步 下载nodejs 访问https://nodejs.org/en/download/url 根据您的系统是32位或64位,按照文字说明进行下载 第二步 安装nodejs 双击运行nodejs的 ...
- java中的集合和区别
Iterator接口是负责定义访问和遍历元素的接口 Connection接口存储了一组不唯一(允许重复)的无序对象 Set接口继承了Connection接口,主要用来存储一组唯一(不允许重复的),无序 ...