最近点问题:二维平面中有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. Proximal Gradient Descent for L1 Regularization

    [本文链接:http://www.cnblogs.com/breezedeus/p/3426757.html,转载请注明出处] 假设我们要求解以下的最小化问题:                     ...

  2. Python学习之路--select解析

    sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后, ...

  3. 使用printf输出各种格式的字符串( 转载)

    1. 原样输出字符串:    printf("%s", str); 2. 输出指定长度的字符串, 超长时不截断, 不足时右对齐:    printf("%Ns" ...

  4. Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K ...

  5. java jdb命令详解

    jdb - Java debugger 功能描述: 通过简单的命令行程序,对本地或远程jvm进程进行调试. 开启jdb会话: 有多种方式可以开启jdb会话. (1)常见的方式是采用Jdb命令打开一个新 ...

  6. cocoapods的时候出现的问题 _OBJC_CLASS_$_XXX

    最新的cocoapod导入xmpp的时候,会出现循环依赖,所以撸主选择了手动导入. 一开始还用的挺开心的,后来,使用cocoapods导入其他的框架,发现调用的时候总是报错. Undefined sy ...

  7. ASP.NET 5系列教程 (一):领读新特性

    近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS.Cloud-ready环境配置降低了云端部 ...

  8. InnoSetup 如何获取安装程序的路径?

    两个常量可以使用: {srcexe} 安装程序执行文件的路径.      {src} 安装程序所在路径. path := ExpandConstant('{srcexe}');

  9. 【T-SQL基础】01.单表查询-几道sql查询题

    概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...

  10. 分享一些Hadoop环境搭建所用到的软件

    本来想用土的掉渣的语言说说hadoop配置的,因为最近总有人问我,环境搭建老出莫名其妙的问题,可是写到一半,还是决定不写了,网上教程好多好多,而大家遇到问题有很多是软件版本不对应造成的,因此我就把大家 ...