题目大意:
给定平面上的 n 个点,求距离最近的两个点的距离的一半。 n <= 10^5.

 

晕乎乎的度过了一上午。。。

总之来学习下分治吧233

分治就是把大问题拆成小问题,然后根据对小问题处理出的结果合并成大问题的答案

比如说这道题,如果我们按照X坐标把所有的点分成两组:

(木哈哈请叫我盗图狂魔○( ^皿^)っHiahiahia…

像上面我们把点分成了集合S1,S2

点对对应的被划分成3种:S1内,S2内,跨S1.S2

那假若我们分别处理出了S1,S2内的答案,再取个min叫做d

那么跨过分界线的点对就不能超过d,这是一个很有用的条件!不信?我们来看看

我们管分界线的X坐标叫x0

首先要知道,所有距离x0超过d的点都不用考虑

其次,这些点之间y的相对距离超过d的也不用考虑

这就把对一个点而言需要考虑的另一个点们限制在了一个小矩形里

再加上d是我们左右分治出来的答案

结论就是对于一个点我们最多只需要考虑6个点就可以了

你可以自己画画?这六个点都分布在矩形的顶点上

而具体实现其实就简单暴力了

具体就看码吧~

 #include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,cnt;
struct point{
double x,y;
}p[];
int mk[];
bool cmpx(point A,point B){return A.x<B.x;}
bool cmpy(int A,int B){return p[A].y<p[B].y;}
double dis(int x,int y){return sqrt((p[x].x-p[y].x)*(p[x].x-p[y].x)+(p[x].y-p[y].y)*(p[x].y-p[y].y));}
double solve(int l,int r){
if(l==r)return 1e18;
if(l+==r)return dis(l,r);
int mid=(l+r)>>;
double x0=(p[mid].x+p[mid+].x)/2.0;
double d=min(solve(l,mid),solve(mid+,r));
cnt=;
for(int i=l;i<=r;i++)
if(p[i].x-x0<=d&&p[i].x-x0>=-d)
mk[++cnt]=i;
sort(mk+,mk++cnt,cmpy);
for(int i=;i<=cnt;i++)
for(int j=i-;j>=;j--)
if(p[mk[i]].y-p[mk[j]].y>d)break;
else d=min(d,dis(mk[i],mk[j]));
return d;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
sort(p+,p++n,cmpx);
printf("%.4lf",solve(,n));
return ;
}

Quoit Design (HDU 1007)平面的最近点对的更多相关文章

  1. (洛谷 P1429 平面最近点对(加强版) || 洛谷 P1257 || Quoit Design HDU - 1007 ) && Raid POJ - 3714

    这个讲的好: https://phoenixzhao.github.io/%E6%B1%82%E6%9C%80%E8%BF%91%E5%AF%B9%E7%9A%84%E4%B8%89%E7%A7%8D ...

  2. HDU 1007 平面上最近点对 分治

    思路: 分治 套路题 //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> ...

  3. HDU ACM 1007 Quoit Design 分而治之的方法,最近点

    意甲冠军:给n坐标点.半一对点之间的距离所需的距离最近. 分析:分而治之的方法,最近点. #include<iostream> #include<algorithm> #inc ...

  4. HDU 1007(套圈 最近点对距离)

    题意是求出所给各点中最近点对的距离的一半(背景忽略). 用分治的思想,先根据各点的横坐标进行排序,以中间的点为界,分别求出左边点集的最小距离和右边点集的最小距离,然后开始合并,分别求左右点集中各点与中 ...

  5. HDU 1007 Quoit Design 平面内最近点对

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 上半年在人人上看到过这个题,当时就知道用分治但是没有仔细想... 今年多校又出了这个...于是学习了一下平 ...

  6. HDU 1007 Quoit Design(经典最近点对问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...

  7. HDU 1007 Quoit Design【计算几何/分治/最近点对】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. hdu 1007 Quoit Design (最近点对问题)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. hdu 1007 Quoit Design 分治求最近点对

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. 痛苦的Windows下的temp目录

    2007不能运行了,错误: [MSBuild Error] “DCC”任务意外失败. System.Configuration.ConfigurationErrorsException: 配置系统未能 ...

  2. HDU4565 So Easy!

    /* HDU4565 So Easy! http://acm.hdu.edu.cn/showproblem.php?pid=4565 数论 快速幂 矩阵快速幂 题意:求[(a+sqrt(b))^n ] ...

  3. hdu 2444 交叉染色判断二分图+二分最大匹配

    /*1A 31ms*/ #include<stdio.h> #include<string.h> #define N 300 int n; struct node { int ...

  4. error at ::0 can't find referenced pointcut...解决方法

    error at ::0 can't find referenced pointcut...解决方法 学习了:http://dyldragon.iteye.com/blog/512612 升级aspe ...

  5. 面向基于英特尔&#174; 架构的 Android* 的 CoCos2D

    Cocos2D 是一款游戏引擎,可与从电脑到手机等多种设备配合使用. 该引擎支持丰富的特性,可帮助创建出色的 2D 游戏.它甚至包含具备全面功能的物理引擎. CoCos2D 的核心元素是基本动画元素( ...

  6. win server 2008 r2 iis+php 500错误内部服务器错误。

    今天遇到一个错误是iis 500错误,由于server是别人负责的.查看日志没什么异常,就发如今任务日志里发现有一段时间间隔没有记录.一開始不知道为什么.之后日志里就都是500错误了,在iis哪里配置 ...

  7. Android解决使用findViewById时须要对返回值进行类型转换问题的辅助类

    在我们的开发工作时,findViewById可能是用得最多的函数之中的一个.但它特别讨厌的地方就是我们常常须要对返回的view进行类型转换,输入麻烦.代码丑陋,比如曾经我们在Activity中找一些子 ...

  8. strcpy函数使用方法以及底层实现

    strcpy(s1, s2);   strcpy函数的意思是:把字符串s2中的内容copy到s1中.连字符串结束标志也一起copy. 这样s1在内存中的存放为:ch\0; 在cout<<s ...

  9. URAL 1826. Minefield(数学 递归)

    题目链接:http://acm.timus.ru/problem.aspx? space=1&num=1826 1826. Minefield Time limit: 0.5 second M ...

  10. Converter实现Date类型转换

    1.springmvc-config.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...