HDU ACM 1007 Quoit Design 分而治之的方法,最近点
意甲冠军:给n坐标点。半一对点之间的距离所需的距离最近。
分析:分而治之的方法,最近点。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; #define N 100005 double min(double a,double b)
{
return a<b? a:b;
} struct POINT
{
double x,y;
};
POINT point[N],*px[N],*py[N]; double dis(const POINT* p1,const POINT* p2)
{
return sqrt(pow(p1->x-p2->x,2.0)+pow(p1->y-p2->y,2.0));
} bool cmpx(const POINT* p1,const POINT* p2)
{
return p1->x<p2->x;
} bool cmpy(const POINT* p1,const POINT* p2)
{
return p1->y<p2->y;
} double core(int s,int e) //分治法求最小点对核心代码
{
int mid,i,j,cnt;
double ans; if(s+1==e) //仅仅有两个点的情况
return dis(px[s],px[e]);
if(s+2==e) //仅仅有三个点的情况
return min(dis(px[s],px[s+1]),min(dis(px[s+1],px[e]),dis(px[s],px[e])));
mid=(s+e)>>1;
ans=min(core(s,mid),core(mid+1,e)); //递归求解
for(cnt=0,i=s;i<=e;i++) //把x坐标在px[mid].x-ans~px[mid].x+ans范围内的点取出来
if(px[i]->x>=px[mid]->x-ans && px[i]->x<=px[mid]->x+ans)
py[cnt++]=px[i];
sort(py,py+cnt,cmpy); //按y值排序
for(i=0;i<cnt;i++)
for(j=i+1;j<cnt;j++)
{
if(py[j]->y-py[i]->y>=ans)
break;
ans=min(ans,dis(py[i],py[j]));
}
return ans;
} int main()
{
int i,n; while(scanf("%d",&n)!=EOF && n)
{
for(i=0;i<n;i++)
{
scanf("%lf%lf",&point[i].x,&point[i].y);
px[i]=&point[i];
}
sort(px,px+n,cmpx); //按x坐标排序
printf("%.2lf\n",core(0,n-1)/2.0);
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
HDU ACM 1007 Quoit Design 分而治之的方法,最近点的更多相关文章
- HDU 1007 Quoit Design【计算几何/分治/最近点对】
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1007 Quoit Design (经典分治 求最近点对)
Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...
- hdu 1007 Quoit Design(分治法求最近点对)
大致题意:给N个点,求最近点对的距离 d :输出:r = d/2. // Time 2093 ms; Memory 1812 K #include<iostream> #include&l ...
- HDU 1007 Quoit Design(经典最近点对问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...
- HDU 1007 Quoit Design(二分+浮点数精度控制)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- hdu 1007 Quoit Design (最近点对问题)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1007 Quoit Design 分治求最近点对
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 杭电OJ——1007 Quoit Design(最近点对问题)
Quoit Design Problem Description Have you ever played quoit in a playground? Quoit is a game in whic ...
- poj 1007 Quoit Design(分治)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- DOMContentLoaded和window.onload
相信写js的.都知道window.onload吧,可是并非每一个人都知道DOMContentLoaded,事实上即使你不知道.非常有可能你也常常使用了这个东西. 普通情况下,DOMContentLoa ...
- 关于VCL的编写 (一) 如何编写自己的VCL控件
如何编写自己的VCL控件 用过Delphi的朋友们,大概对Delphi的最喜欢Delphi的不是他的强类型的pascal语法,而是强大的VCL控件,本人就是一位VCL控件的爱好者. VCL控件的开源, ...
- HDU 4777 Rabbit Kingdom(树状数组)
HDU 4777 Rabbit Kingdom 题目链接 题意:给定一些序列.每次询问一个区间,求出这个区间和其它数字都互质的数的个数 #include <cstdio> #include ...
- mtk硬件项目开始关闭蓝牙功能:mtk 硬件ScanCode和keycode应用演示示例
项目要求:该项目因为没有使用android5.0,导致启动bluetooth的蓝牙audio slave功能必须使用第三方模组,该第三方模组,启动是通过android主板通过GPIO控制.UI界面是通 ...
- redirect的错误用法asp.net怎么使用自定义错误
工作了几年,写过程序也运营过网站,自定义错误也很熟悉了,最近再做项目发现有同事写了这样的代码 if (action != null) { id = Request.QueryString[" ...
- 每天努力一点之SQL
今天工作当中遇到一个问题:统计信息并导出EXcel 报表. 刚开始只做了统计信息: 如下图 请看最后一列的数据. 我当时想都从数据库里取出来,但是由于我能力有限没有做出来.先贴下后来写的SQL 语句. ...
- A Novel Multi-label Classification Based on PCA and ML-KNN
ICIC Express Letters ICIC International ⓒ2010 ISSN 1881-803X Volume4, Number5, O ...
- hdu 5077 NAND(暴力打表)
题目链接:hdu 5077 NAND 题目大意:Xiaoqiang要写一个编码程序,然后依据x1,x2,x3的值构造出8个字符.如今给定要求生成的8个字符.问 说Xiaoqiang最少要写多少行代码. ...
- 数据库 版本号是 661,打不开。此server支持 655 和更早的版本号。不支持降级路径
"数据库 的版本号为 661,无法打开.此server支持 655 版及更低版本号. 不支持降级路径" 出现这种问题,通常是由于数据库版本号不同造成的. 我们能够用以下的语句查询数 ...
- 正确openvSwitch不同种类port认识
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdm9uemhvdWZ6/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...