利用二分的方法来计算,应该是说利用分治的方法吧! 刚开始感觉时间会爆 后来发现嘎嘎居然没有 ,嗨自己算错了时间:

#include <iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
struct point
{
double x,y;
point (double a=0,double b=0)
{
x=a;y=b;
}
};
struct point p[100005];
int a[100005];
bool cmp1(point a,point b)
{
if(a.x<b.x)return true;
else return false;
}
bool cmp2(int a,int b)
{
if(p[a].y<p[b].y)return true;
else return false ;
}
double dist(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double min_value(double a,double b){ return a>b?b:a;}
double find(int l,int r)
{
if(l+1==r) return dist(p[l],p[r]);
if(l+2==r)
{
double a1=dist(p[l],p[l+1]);
double a2=dist(p[l+1],p[r]);
double a3=dist(p[l],p[r]);
a1= min_value(a1,min_value(a2,a3));
return a1;
}
int mid,i,num,j;
double ans;
mid=(l+r)/2;
num=0;
ans=min_value(find(l,mid),find(mid+1,r));
for(i=l;i<=r;i++)
if(p[i].x>=p[mid].x-ans&&p[i].x<=p[mid].x+ans)
a[num++]=i;
sort(a,a+num,cmp2);
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
{
if(p[a[j]].y-p[a[i]].y>ans)break;
ans=min_value(ans,dist(p[a[j]],p[a[i]]));
}
return ans; } int main()
{
double x,y;
int n,i;
while(scanf("%d",&n)==1)
{
if(n==0)break;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&x,&y);
p[i]=point(x,y);
}
sort(p,p+n,cmp1);
printf("%.2lf\n",find(0,n-1)/2);
} return 0;
}

最近点对HDU1007的更多相关文章

  1. Quoit Design(hdu1007)最近点对问题。模版哦!

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

  2. HDU1007(最近点对)

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

  3. (hdu1007)Quoit Design,求最近点对

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

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

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

  5. HDU1007最近点对(分治)

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 直接见代码吧.不过这个是N*logN*logN的 尽管如此,我怎么感觉我的比他们的还快??? #inclu ...

  6. HDU-1007 Quoit Design 平面最近点对

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 简单裸题,测测模板,G++速度快了不少,应该是编译的时候对比C++优化了不少.. //STATU ...

  7. 【hdu1007】最近点对

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 分治法的经典应用,复杂度可以证明为nlognlogn #include <iostream> ...

  8. ICP算法(Iterative Closest Point迭代最近点算法)

    标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...

  9. Quoit Design---hdu1007(最近点对问题 分治法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:给你n(2<=n<=10^6)个点的坐标,然后找到两个点使得他们之间的距离最小 ...

随机推荐

  1. python递归,装饰器,函数, 高阶函数

    在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...

  2. Python3+Selenium环境配置

    一.所需工具 1.Python3.6安装包 2.Selenium安装包(selenium-server-standalone-3.8),如果是Python3的话可以不用下载selenium压缩包,Py ...

  3. Kubernetes应用管理

    除了容器资源管理和调度,Kubernetes另外一个核心价值是提供了针对不同类型应用管理的API接口集合,这些API集合把针对不同类型应用的管理能力分别到Kubernetes平台中.以Web业务(Lo ...

  4. javascript判断两个对象属性以及值是否相等

    objIsEqual(obj1,obj2){//比较两个对象键值对是否相等 var o1 = obj1 instanceof Object; var o2 = obj2 instanceof Obje ...

  5. 第四章:初识CSS3

    1.CSS规则由两部分构成,即选择器和声明器 声明必须放在{}中并且声明可以是一条或者多条 每条声明由一个属性和值构成,属性和值用冒号分开,每条语句用英文冒号分开 注意: css的最后一条声明,用以结 ...

  6. dxCameraControl控件(拍照)

    拍照演示 主要属性设置 Active:True DeviceIndex:设备号,默认为0 其他方法 procedure Capture; //捕获 procedure Pause; //暂停 proc ...

  7. vue-底部导航栏

    <template> <div class="bottom"> <div class="bottom_button iconfont ico ...

  8. 静态库lib和动态库dll相关总结

    1.静态链接库LIB和动态链接库DLL的区别 若采用静态链接库,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了.而动态动态链接库则不必被包含在最终 EXE 文件中,EXE 文件执行时可 ...

  9. 266A

    #include <iostream> #include <string> using namespace std; int main() { string stones; i ...

  10. 虚拟机开启时 VMware Authorization Service 这个服务找不到的解决办法

    有些时候我们启动虚拟机 会出现 The VMware Authorization Service is not running 正常情况下我们只要进 我的电脑-------> 管理------- ...