poj 2187 Beauty Contest 凸包模板+求最远点对
题意:给你n个点的坐标,n<=50000,求最远点对
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
int max(int a,int b) {return a>b?a:b;};
int min(int a,int b) {return a<b?a:b;};
struct node{
int x, y;
}ne[50005];
bool cmp(node a,node b)
{
if(a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
} int cross(node a,node b,node c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
} int a[50005],m,k;
void tubao(int n)
{
sort(ne+1,ne+n+1,cmp);
m=0; for(int i=1;i<=n;i++)
{
while(m>=2&&cross(ne[a[m-1]],ne[a[m]],ne[i])<=0)
m--;
++m;
a[m]=i;
}
k=m;
for(int i=n-1;i>=1;i--)
{
while((m>=k+1)&&cross(ne[a[m-1]],ne[a[m]],ne[i])<=0)
m--;
++m;
a[m]=i;
}
} double dist(int i,int j)
{
return (ne[i].x-ne[j].x)*(ne[i].x-ne[j].x)
+(ne[i].y-ne[j].y)*(ne[i].y-ne[j].y);
} int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d %d",&ne[i].x,&ne[i].y);
tubao(n);
int maxn=0;
for(int i=1;i<=k;i++)
for(int j=k+1;j<=m;j++)
maxn=max(maxn,dist(a[i],a[j]));
//for(int i=1;i<=m;i++)
// cout<<"|||"<<a[i]<<endl;
printf("%d\n",maxn);
}
return 0;
}
分析:模板
wa代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
int max(int a,int b) {return a>b?a:b;};
int min(int a,int b) {return a<b?a:b;};
struct node{
int x, y;
}ne[50005];
bool cmp(node a,node b)
{
if(a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
} int cross(node a,node b,node c)
{
return (b.x-a.x)*(c.y-b.y)-(c.x-b.x)*(b.y-a.y);
} int a[50005],m;
void tubao(int n)
{
sort(ne+1,ne+n+1,cmp);
m=0; for(int i=1;i<=n;i++)
{
if(m>2&&cross(ne[a[m-1]],ne[a[m]],ne[i])<0)
m--;
a[++m]=i;
} for(int i=n-1;i>=1;i--)
{
if(i<=(n-2)&&cross(ne[i],ne[a[m]],ne[a[m-1]])>0)
m--;
a[++m]=i;
}
} double dist(int i,int j)
{
return (ne[i].x-ne[j].x)*(ne[i].x-ne[j].x)
+(ne[i].y-ne[j].y)*(ne[i].y-ne[j].y);
} int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d %d",&ne[i].x,&ne[i].y);
tubao(n);
int maxn=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
if(i!=j)
maxn=max(maxn,dist(a[i],a[j]));
//for(int i=1;i<=m;i++)
// cout<<"|||"<<a[i]<<endl;
printf("%d\n",maxn);
}
return 0;
}
poj 2187 Beauty Contest 凸包模板+求最远点对的更多相关文章
- poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
/* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...
- POJ 2187 - Beauty Contest - [凸包+旋转卡壳法][凸包的直径]
题目链接:http://poj.org/problem?id=2187 Time Limit: 3000MS Memory Limit: 65536K Description Bessie, Farm ...
- POJ 2187 Beauty Contest 凸包
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27276 Accepted: 8432 D ...
- POJ 2187 Beauty Contest [凸包 旋转卡壳]
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 36113 Accepted: 11204 ...
- poj 2187 Beauty Contest , 旋转卡壳求凸包的直径的平方
旋转卡壳求凸包的直径的平方 板子题 #include<cstdio> #include<vector> #include<cmath> #include<al ...
- POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
链接: http://poj.org/problem?id=2187 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- poj 2187 Beauty Contest (凸包暴力求最远点对+旋转卡壳)
链接:http://poj.org/problem?id=2187 Description Bessie, Farmer John's prize cow, has just won first pl ...
- poj 2187:Beauty Contest(计算几何,求凸包,最远点对)
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 26180 Accepted: 8081 D ...
- POJ 2187 Beauty Contest (求最远点对,凸包+旋转卡壳)
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 24283 Accepted: 7420 D ...
随机推荐
- 【Python】【demo实验2】【打印乘法口诀表】
打印乘法口诀表 源代码: # encoding=utf-8 for i in range(1,10): print("\n") for j in range(1,10): if i ...
- 一千行MySQL学习笔记 (转)
出处: 一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...
- Collection接口的子接口——List接口
https://docs.oracle.com/javase/8/docs/api/java/util/List.html public interface List<E> extends ...
- 分布式---Paxos算法
5.Paxos Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.一个典型的场景就是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最 ...
- 关于NGINX在wnidows下面和linux下面的多站点的反向代理的配置
原创文章,转载注明出处 nginx作为一款优秀的反向代理软件,以其好用,易于搭建负载均衡的网站集群而著称,这里分别记录一下工作中用到nginx作为负载以及多站点发布的时候一些配置和注意事项 一 ng ...
- JavaScript的数组方法(array)
数组方法: 1. concat() 合并数组 2. join() 将数组的元素拼接成字符串,并指定分隔符 3. push() 往数组末尾添加一个元素,并返回新的数组的长度 4. reverse( ...
- java知识点复习(1):
1.java整形变量078:在java数字里数字表达式前面加上0表示8进制,因为8进制里表示数字只有0-7,所以这里的表达式有错误.相对而言,077就是合法的,转换成10进制就是63(7*8+7=63 ...
- 前端点击下载excel表格数据
<el-button type="primary" @click="downloadChartData" size="mini"> ...
- SpringBoot:spring boot使用Druid和监控配置
Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能. Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource 业 ...
- 深入简出mysql--第一部分
第二章: 1.sql分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义. 常用的语句关键字主要包括 ...