链接

模板 稍加一点标记

模板

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 200010
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
struct point
{
double x,y;
int id;
int flag;
point(double x=,double y =):x(x),y(y){}
}p[N],pp[N],py[N];
typedef point pointt;
pointt operator -(point a,point b)
{
return point(a.x-b.x,a.y-b.y);
}
double dis(point a,point b)
{
if(a.flag==b.flag) return INF;
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool cmp(point a,point b)
{
return a.x<b.x;
}
bool cmpp(point a,point b)
{
return a.y<b.y;
}
void binmerge(point py[],point pp[],int l,int m,int r)
{
int i,j,g=l;
for(i = l,j = m+ ; i <= m&&j <= r ;)
if(pp[i].y<pp[j].y) py[g++] = pp[i++];
else py[g++] = pp[j++]; while(i<=m) py[g++] = pp[i++];
while(j<=r) py[g++] = pp[j++];
memcpy(pp + l, py + l, (r - l + ) *sizeof(py[]));
}
double binshortest(point p[],point pp[],point py[],int l,int r)
{
if(r-l==) return dis(p[l],p[r]);
if(r-l==) return min(min(dis(p[l],p[r]),dis(p[l],p[l+])),dis(p[l+],p[r]));
int mid = (l+r)>>;
int i,j,g = l,o = mid+;
for(i = l ; i <= r ; i++)
{
if(py[i].id<=mid)//按y坐标顺序将点划分到pp左半数组
pp[g++] = py[i];
else
pp[o++] = py[i];//pp右半数组
}
double minz = min(binshortest(p,py,pp,l,mid),binshortest(p,py,pp,mid+,r));
binmerge(py,pp,l,mid,r);
g = l;
for(i = l ; i <= r ; i++)
if(fabs(py[i].x-py[mid].x)<minz) pp[g++] = py[i];
for(i = l ; i < g ; i++)
{
for(j = i+ ; j < g && fabs(pp[i].y-pp[j].y)<minz; j++)
minz = min(dis(pp[i],pp[j]),minz);
}
return minz;
}
int main()
{
int n,i,t;
cin>>t;
while(t--)
{
scanf("%d",&n);
for(i = ; i < n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i].flag = ;
}
for(i = n; i < n*; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i].flag = ;
}
n<<=;
sort(p,p+n,cmp);
for(i = ;i < n ;i++)
p[i].id = i;
memcpy(py,p,n*sizeof(py[]));
sort(p,p+n,cmpp);
double ans = binshortest(p,pp,py,,n-);
printf("%.3f\n",ans);
}
return ;
}

poj3714Raid(平面最近点对)的更多相关文章

  1. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

  2. HDU-4631 Sad Love Story 平面最近点对

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...

  3. HDU1007--Quoit Design(平面最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  4. Vijos 1012 清帝之惑之雍正 平面最近点对(分治)

    背景 雍正帝胤祯,生于康熙十七年(1678)是康熙的第四子.康熙61年,45岁的胤祯继承帝位,在位13年,死于圆明园.庙号世宗. 胤祯是在康乾盛世前期--康熙末年社会出现停滞的形式下登上历史舞台的.复 ...

  5. 『Raid 平面最近点对』

    平面最近点对 平面最近点对算是一个经典的问题了,虽然谈不上是什么专门的算法,但是拿出问题模型好好分析一个是有必要的. 给定\(n\)个二元组\((x,y)\),代表同一平面内的\(n\)个点的坐标,求 ...

  6. Luogu4423 BJWC2011 最小三角形 平面最近点对

    传送门 题意:给出$N$个点,求其中周长最小的三角形(共线的也计算在内).$N \leq 2 \times 10^5$ 这道题唤起了我对平面最近点对的依稀记忆 考虑平面最近点对的分治,将分界线两边的求 ...

  7. 平面最近点对(分治nlogn)

    平面最近点对,是指给出平面上的n个点,寻找点对间的最小距离 首先可以对按照x为第一关键字排序,然后每次按照x进行分治,左边求出一个最短距离d1,右边也求出一个最短距离d2,那么取d=min(d1, d ...

  8. Luogu 1429 平面最近点对 | 平面分治

    Luogu 1429 平面最近点对 题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 ...

  9. hdu1007 平面最近点对(暴力+双线程优化)

    突发奇想,用双线程似乎可以优化一些暴力 比如说平面最近点对这个题目,把点复制成2份 一份按照x排序,一份按照y排序 然后双线程暴力处理,一份处理x,一份处理y 如果数据利用x递减来卡,那么由于双线程, ...

随机推荐

  1. 如何扩大ImageView的点击区域

    我们在开发中会遇到,给imageview设置点击事件,但是美工切的原始图片一般在24dp左右,这个尺寸点击时会出现不灵敏的情况(点击区域太小). 解决方案: 给imageView设置  scaleTy ...

  2. 优秀的web前端工程师要具备什么

    优秀的前端工程师需要具备良好的沟通能力,因为你的工作与很多人的工作息息相关.在任何情况下,前端工程师至少都要满足下列四类客户的需求. 产品经理--这些是负责策划应用程序的一群人.他们能够想象出怎样通过 ...

  3. ACM题目————字串数

    Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应的个数,计算一共可 ...

  4. 【转】去掉eclipse的validate

    转载地址:http://www.blogjava.net/leisure/archive/2013/01/11/394087.html 困扰了好几天,与大家共享 1,在project名称上右键选择pr ...

  5. C4D to Unity3D插件C2U Tool开源发布!简化你的工作流

    Unity早期有对.c4d文件进行支持,但缩放问题,不支持顶点色,以及目标机器必须安装C4D等都极为蛋疼,这是这款工具开发的初衷之一.C2U工具解决了传统FBX导出的诸多问题,以及脚本链接,Shade ...

  6. 安装opencv以及遇到的坑

    参考这篇文章: http://www.tuicool.com/articles/36fMnem 还是国外的文章靠谱: http://docs.opencv.org/master/dd/dd5/tuto ...

  7. html body的属性 格式控制标签 内容容器标签 超链接标签 图片标签 表格

    一.body的属性 <body  bgcolor  页面背景色 background 背景壁纸.图片 text文字颜色 topmargin上边距 leftmargin左边距 rightmargi ...

  8. if else 语句练习

    一.if  else 语句.

  9. 如何用linux远程登录windows计算机

    大家可能试过用windows远程登录另一个windows pc机,今天大家将会学到如何用 linux远程登录你的windows系统. 首先大家要做到得救是将自己linux和windows操作机的IP地 ...

  10. JS常用的腳本庫--包括在線編輯器

    原文链接 一.基本库 1.jQuery a.简介 JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, F ...