博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1007 Quoit Design
阅读量:5066 次
发布时间:2019-06-12

本文共 1382 字,大约阅读时间需要 4 分钟。

平面最近点对板子, 一个有趣的分治

还挺好写的...

#include 
#include
#include
#include
using namespace std;const int maxn=100005;typedef pair
pd;pd A[maxn];pd B[maxn];pd C1[maxn],C2[maxn];double sqr(double x){return x*x;}double dis(pd a, pd b){ return sqrt(sqr(a.first-b.first)+sqr(a.second-b.second));}double solve(int l, int r){ if(l==r)return 1e20; int mid=(l+r)/2; double midx=(A[mid].first+A[mid+1].first)/2; double a1=solve(l,mid); double a2=solve(mid+1,r); double ans=min(a1,a2); int k1=0,k2=0; for(int i=l;i<=mid;++i){ if(A[i].first+ans>=midx)C1[++k1]=A[i]; } for(int i=mid+1;i<=r;++i){ if(A[i].first-ans<=midx)C2[++k2]=A[i]; } for(int i=1,L=1,R=0;i<=k1;++i){ while(R
=C2[R+1].second)++R; while(L<=k2&&C1[i].second-ans>C2[L].second)++L; for(int j=L;j<=R;++j){ ans = min(ans, dis(C1[i],C2[j])); } } for(int i=l,j=mid+1;i<=mid||j<=r;(j>r||(i<=mid&&A[i].second<=A[j].second))?(i++):(j++)){ B[i+j-mid-1]=(j>r||(i<=mid&&A[i].second<=A[j].second))?(A[i]):(A[j]); } for(int i=l;i<=r;++i)A[i]=B[i]; return ans;}int main(){ int n; while(scanf("%d",&n),n!=0){ for(int i=1;i<=n;++i){ scanf("%lf%lf",&A[i].first,&A[i].second); } sort(A+1,A+n+1); printf("%.2f\n",solve(1,n)/2.0); } return 0;}

转载于:https://www.cnblogs.com/liu-runda/p/11256965.html

你可能感兴趣的文章
sqlplus登陆
查看>>
[翻译svg教程]svg中的circle元素
查看>>
HDU 1201 Fibonacci Again
查看>>
ASP.NET MVC视图和控制器之间的传值总结(一)
查看>>
敏捷与 DevOps:是敌是友?
查看>>
bzoj1588营业额统计
查看>>
概率与数学期望
查看>>
MySQL 5.1完全卸载
查看>>
优先队列:左式堆
查看>>
我的学习之路_第十六章_xml
查看>>
nSamplesPerSec和nAvgBytesPerSec
查看>>
Flex Accordion 和 TabNavigator组件浏览器跳转问题
查看>>
服务器环境配置点滴
查看>>
Vuex 环境配置
查看>>
只要存心谦卑,各人看别人比自己强。
查看>>
原创 Reflector 8.1 反激活
查看>>
ESP8266 wifi干扰、钓鱼实现
查看>>
Vuex总结
查看>>
项目拆分子工程(简单版)
查看>>
request模块
查看>>