hdu 1007 Quoit Design(分治法求最近点对)
大致题意:给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(分治法求最近点对)的更多相关文章
- 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【计算几何/分治/最近点对】
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 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)Tot ...
- 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(计算几何の最近点对)
Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...
- 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最近点对( 分治法)
题意: 给出平面上的n个点,问任意点对之间的最短距离是多少? 思路: 先将所有点按照x坐标排序,用二分法将n个点一分为二个部分,递归下去直到剩下两或一个点.对于一个部分,左右部分的答案分别都知道,那么 ...
- HDU 1007:Quoit Design(分治求最近点对)
http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:平面上有n个点,问最近的两个点之间的距离的一半是多少. 思路:用分治做.把整体分为左右两个部分,那么 ...
随机推荐
- PHP using mcrypt and store the encrypted in MySQL
This is how I would do it. Create a class to do encryption/decryption: class cipher { private $secur ...
- vue操作本地存储
const ls = window.localStorage const ss = window.sessionStorage export const LStorage= { getItem(key ...
- elementUI 学习入门之 inputNumber 计数器
InputNumber 计数器 基础用法 <el-input-number v-model="num2"></el-input-number> v-mode ...
- 长沙理工大学第十二届ACM大赛-重现赛 G - 跑路ing
题目描述 vigoss18 辞职成功终于逃出了公司,但是没过太久,公司就发现vigoss18 的所作所为,于是派人来把他抓 回去. vigoss18 必须一直跑路,躲避公司的围捕.可以抽象的看成一个有 ...
- 洛谷P3639 [APIO2013] 道路费用 [生成树的特殊算法]
题目传送门 道路费用 格式难调,题面就不放了. 分析: 这是一道要细(yan)心(jing)的生成树的好(gui)题. 首先我们看到$k$的范围非常小,那么我们就可以直接$2^k$枚举每一条加边是否选 ...
- Tornado(二)
跨站请求伪造CSRF 开启xsrf(就是叫法不一样和csrf一样),'xsrf_cookies':True settings = { 'template_path':'template', 'stat ...
- Entity Framework(实体框架 EF)
什么是Entity Framework呢(下面简称EF)? EF(实体框架)是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架.ORM(对象关系映射框架):指的是面向 ...
- 扩展gcd codevs 1200 同余方程
codevs 1200 同余方程 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 求关 ...
- python输出字符串,UnicodeEncodeError: 'ascii' codec can't encode characters in position问题
2017-06-28更新:换到python3.x中,编码问题减少了很多.这篇博文不适用于python3.x http://blog.sina.com.cn/s/blog_64a3795a01018vy ...
- 【转】2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题
腾讯面试(WEB高级应用开发工程师<PHP>)非答案啊!!! 开始正题之前,容博主啰嗦两句吧,呵呵.(你也可跳过直接到红色字体看题!) 腾讯一直是我很敬重的企业,尽管小企鹅在战略上饱受争议 ...