大致题意:给N个点,求最近点对的距离 d ;输出:r = d/2。

// Time 2093 ms; Memory 1812 K
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define eps 1e-8
#define maxn 100010
#define sqr(a) ((a)*(a)) using namespace std; int sig(double x)
{
return (x>eps)-(x<-eps);
} struct point
{
double x,y;
point(double xx=0,double yy=0):x(xx),y(yy){}
}p[maxn]; bool operator < (point a,point b)
{
return a.x<b.x || (a.x==b.x && a.y<b.y);
}
bool cmp(point a,point b)
{
return a.y<b.y || (a.y==b.y && a.x<b.x);
}
double len(point a,point b)
{
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
double min_dis(int l,int r)
{
int i,j,k,s;
double d,mi=-1;
if(r-l<4)
{
for(i=l;i<r;i++) for(j=i+1;j<r;j++)
{
d=len(p[i],p[j]);
if(mi<0 || sig(d-mi)<0) mi=d;
}
return mi;
}
int mid=(l+r)/2;
double minl=min_dis(l,mid);
double minr=min_dis(mid,r);
mi=minl<minr?minl:minr;
for(i=1;i<mid-l && sig(p[mid].x-p[mid-i].x-mi)<0;i++);i--;
for(j=1;j<r-mid && sig(p[mid+j].x-p[mid].x-mi)<0;j++);j--;
sort(p+mid-i,p+mid,cmp);
sort(p+mid,p+mid+j+1,cmp);
int t=mid,flag;
for(k=mid-i;k<mid;k++)
{
flag=1;
for(s=t;s<=mid+j;s++)
{
if(sig(p[k].y-p[s].y)>0)
{
if(sig(p[k].y-p[s].y-mi)>=0) continue;
else
{
if(flag)
{
flag=0;t=s;
}
d=len(p[s],p[k]);
if(sig(d-mi)<0) mi=d;
}
}
else
{
if(sig(p[s].y-p[k].y-mi)>=0) break;
else
{
d=len(p[s],p[k]);
if(sig(d-mi)<0) mi=d;
}
}
}
}
sort(p+mid-i,p+mid+j+1);
return mi;
} int main()
{
int i,n;
while(scanf("%d",&n)!=EOF && n)
{
for(i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
sort(p,p+n);
printf("%.2lf\n",min_dis(0,n)/2);
}
return 0;
}

hdu 1007 Quoit Design(分治法求最近点对)的更多相关文章

  1. hdu 1007 Quoit Design (经典分治 求最近点对)

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

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

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

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

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

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

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

  5. HDU 1007 Quoit Design(二分+浮点数精度控制)

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

  6. HDU 1007 Quoit Design(计算几何の最近点对)

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

  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最近点对( 分治法)

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

  9. HDU 1007:Quoit Design(分治求最近点对)

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:平面上有n个点,问最近的两个点之间的距离的一半是多少. 思路:用分治做.把整体分为左右两个部分,那么 ...

随机推荐

  1. 【转载】okhttp源码解析

    转自:http://www.open-open.com/lib/view/open1472216742720.html https://blog.piasy.com/2016/07/11/Unders ...

  2. 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 D - 新卡片游戏

    题目描述

  3. 洛谷P1438 无聊的数列 [zkw线段树]

    题目传送门 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]} ...

  4. 快速配置webpack多入口脚手架

    背景 当我们基于vue开发单个项目时,我们会init一个vue-cli,但当我们想在其他项目里共用这套模板时,就需要重新init一个,或者clone过来,这非常不方便,而且当多人开发时,我们希望所有的 ...

  5. Javascript 中的神器

    Promise in js 回调函数真正的问题在于他剥夺了我们使用 return 和 throw 这些关键字的能力.而 Promise 很好地解决了这一切. 2015 年 6 月,ECMAScript ...

  6. 【HDU 6020】 MG loves apple (乱搞?)

    MG loves apple  Accepts: 20  Submissions: 693  Time Limit: 3000/1500 MS (Java/Others)  Memory Limit: ...

  7. NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论

    http://172.20.6.3/Problem_Show.asp?id=1289 除了下标一坨一坨屎一样挺恶心其他都还挺容易的dp,这道题才发现scanf保留小数位是四舍五入的,惊了. f[k][ ...

  8. Android 应用内多进程实现

    android平台支持多进程通信,也支持应用内实现多进程那么多进程应该能为我们带来什么呢我们都知道,android平台对应用都有内存限制,其实这个理解有点问题,应该是说android平台对每个进程有内 ...

  9. redisson实现基于业务的互斥锁

    虽然数据库有锁的实现,但是有时候对于数据的操作更需要业务层控制. 这个解决的问题有次面试被问到过,当时不知道怎么解决,乱说一通,今天也算是有个解决方案了 项目中有个需求,就是订单需要经过一层一层的审核 ...

  10. bzoj 2754 ac自动机

    第一道AC自动机题目. 记一下对AC自动机的理解吧: AC自动机=Trie+KMP.即在Trie上应用KMP思想,实现多Pattern的匹配问题. 复杂度是预处理O(segma len(P)),匹配是 ...