最近点问题:二维平面中有n(n很大)个点,求出距离最近的两个点

	思路:因为n的值很大,所以暴力和dp都行不通了吧!分治法就挺好的。
将区间一半一半的分开,直到分成只有一个点或两个点的时候!
对于只有两个点的区间,最小值就是这两个点的距离,只有一个点的区间,
最小值就是无穷大。注意还要考虑合并的时候,可能距离最近的两个点,
分别在左右两个不同的区间。对于这种情况的处理如下:
mid=(ld+rd)/2;
ans = min(solve(ld, mid), solve(mid+1, rd));得到两段区间最小值的最小值
从中间向两边寻找,因为我们是按照x坐标排序的,在左区间向左边寻找的时候
如果某一个点的x到中间点x的距离大于ans(否则将这样的点保存),那么这个
点左边的点就不可能在右区间寻找到相应的点满足两个点的距离小于ans的,那么
就结束继续查找(这样算是一种优化) 同理在右区间向右寻找。。。 然后对存储的节点按照y坐标进行从小到大的排序。
枚举每两个点寻找最小的距离
 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define MAX 99999999999999.0
using namespace std; struct node{
double x, y;
}nd[], ndx[]; bool cmp(node a, node b){
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
} bool cmpy(node a, node b){
return a.y < b.y;
} double dist(node a, node b){
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
} double solve(int ld, int rd){
if(ld == rd) return MAX;
if(ld + == rd) return dist(nd[ld], nd[rd]);
int mid = (ld+rd)/;
double ans = min(solve(ld, mid), solve(mid+, rd));
int len = ;
for(int i = mid; i>=ld; --i)
if(nd[mid].x - nd[i].x <= ans)
ndx[len++] = nd[i];
else break;
for(int i=mid+; i<=rd; ++i)
if(nd[i].x - nd[mid].x <= ans)
ndx[len++] = nd[i];
else break; sort(ndx, ndx+len, cmpy) ;
for(int i=; i<len-; ++i)
for(int j=i+; j<len; ++j)
if(ndx[j].y - ndx[i].y >= ans) break;//这里做一处优化
else ans = min(ans, dist(ndx[i], ndx[j]));
return ans;
} int main(){
int n;
while(scanf("%d", &n) && n){
for(int i=; i<n; ++i)
scanf("%lf%lf", &nd[i].x, &nd[i].y);
sort(nd, nd+n, cmp);
printf("%.2lf\n", solve(, n-)/2.0);
}
return ;
}

HDU 1007Quoit Design(最近点问题)的更多相关文章

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

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

  2. 最近点对问题 HDU Quoit Design 1007 分治法

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...

  3. HDU 1007 Quoit Design最近点对( 分治法)

    题意: 给出平面上的n个点,问任意点对之间的最短距离是多少? 思路: 先将所有点按照x坐标排序,用二分法将n个点一分为二个部分,递归下去直到剩下两或一个点.对于一个部分,左右部分的答案分别都知道,那么 ...

  4. 杭电OJ——1007 Quoit Design(最近点对问题)

    Quoit Design Problem Description Have you ever played quoit in a playground? Quoit is a game in whic ...

  5. hdu_1007_Quoit Design(最近点对)

    题目连接:hdu_1007_Quoit Design 题意: 给你平面上的一些点,让你找出这些点的最近点对的距离 题解: 采用分治,达到O(nlognlogn)的时间复杂度就能艹过去了 #includ ...

  6. HDU 1031 Design T-Shirt

    http://acm.hdu.edu.cn/showproblem.php?pid=1031 题意 :n个人,每个人对m件衣服打分,每个人对第 i 件衣服的打分要加起来,选取和前 k 高的输出他们的编 ...

  7. hdu 4631(最近点对,容器)

    点击打开链接 题意: 给你一个平面,每次加入一个点,当点数>=2时,求最近点对距离的平方,最后输出所有的平方和. 给你a,b,c x[0]=0;x[i]=(x[i-1]*a+b)%c 如果按照平 ...

  8. 杭电 HDU 1031 Design T-Shirt

    Design T-Shirt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  9. HDU 1031.Design T-Shirt【结构体二次排序】【8月21】

    Design T-Shirt Problem Description Soon after he decided to design a T-shirt for our Algorithm Board ...

随机推荐

  1. windows 录音程序(二)

    (二)录音流程 Waveform APIs,流程如下: a.打开录音设备waveInOpen; b.准备wave数据头waveInPrepareHeader; c.准备数据块waveInAddBuff ...

  2. Android Meun 用法

    Android Meun 用法 点击菜单实体键弹出菜单:如下图 main_activity.xml <?xml version="1.0" encoding="ut ...

  3. Silverlight用户自定义控件件中增加属性和方法

    下面的例子在用户控件MyCpmzSelect中增加了一个myCaption属性 public static readonly DependencyProperty myCaptionProperty ...

  4. spi接口的ds1302时钟芯片控制在lcd1602上显示

    spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

  5. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  6. C#中使用OpenSSL的公钥加密/私钥解密

    在C#中进行公钥加密/私钥解密,需要用RSACryptoServiceProvider,但是它不支持由OpenSSL生成的公钥/私钥字符串. 比如这样的公钥/私钥对( 公私钥生成方法见 http:// ...

  7. 扒皮下GitHub 404的图片层次轴动特效

    今天要克隆的前端特效非常有意思,可以参见GitHub404页面 https://github.com/vajoy/master/index.html 记得之前华为在站酷发布EMUI设计大赛的主页也用了 ...

  8. RCP:【转载】插件无法启动的解决方案

    有空了再翻译吧…… Table 2. Run configuration problems Problem Investigate During start you get error message ...

  9. 设计模式之美:State(状态)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...

  10. 冲刺阶段 day 10

    项目进展 目前我们已经完成了系部管理,教师管理,班级管理,学生管理这四大部分代码的编写及数据库的搭建与连接.就差最后专业管理这一部分了. 存在问题 其实我们从开始这个项目到现在,最大的问题还是在代码编 ...