链接

模板 稍加一点标记

模板

 #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. ectouch第二讲之 文件结构

    相信大家在ectouch官网都注意到了,ectouch采用的MVC框架,之前一直以为它用的和ecshop一样都是smarty,本鸟默默按照smarty的文件结构研究了好几天,结果是各种文件对不上号.无 ...

  2. uname -r和uname -a了解

    1.uname -r :显示操作系统的发行版号2.uname -a :显示系统名.节点名称.操作系统的发行版号.操作系统版本.运行系统的机器 ID 号. #uname -aHP-UX RX1600 B ...

  3. ACM题目————星际之门(一)

    描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地. 帝国 ...

  4. easyui datebox 只选择年月

    //将日期输入框变为年月的函数方法    var month=0;      $('#effectiveDate').datebox({        onShowPanel: function () ...

  5. ACM Computer Factory

    ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6104 Accepted: 2113 ...

  6. 第十二届浙江省大学生程序设计大赛-Lunch Time 分类: 比赛 2015-06-26 14:30 5人阅读 评论(0) 收藏

    Lunch Time Time Limit: 2 Seconds Memory Limit: 65536 KB The 999th Zhejiang Provincial Collegiate Pro ...

  7. 封装NPOI导出含下拉列表的Excel

    /// <summary> /// 绑定数据的方法 /// </summary> /// <param name="ssfworkbook">H ...

  8. 使用repeater实现gridview的功能

    <asp:Repeater ID="rptfindData" runat="server"> <HeaderTemplate> < ...

  9. laravel框架总结(一) -- 请求和响应

    一.laravel请求 1.获取请求 1>获取请求的 URI path 方法会返回请求的 URI.所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path ...

  10. 2016年10月15日 星期六 --出埃及记 Exodus 18:26

    2016年10月15日 星期六 --出埃及记 Exodus 18:26 They served as judges for the people at all times. The difficult ...