zoj2107
来源:互联网 发布:mysql 修改字段注释 编辑:程序博客网 时间:2024/06/06 04:15
# include <stdio.h># include <algorithm># include <math.h># define maxn 100009using namespace std;struct node{ double x,y;}vex[maxn],vex2[maxn];double min(double a,double b){ return a<b?a:b;}double dis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int cmpx(node a,node b){ return a.x<b.x;}int cmpy(node a,node b){ return a.y<b.y;}double solve(int l,int r){ int m,i,j; if(r==l+1) return dis(vex[r],vex[l]); if(r==l+2) return min(dis(vex[l],vex[l+1]),min(dis(vex[l],vex[r]),dis(vex[l+1],vex[r]))); double d; int mid=(r+l)/2; d=min(solve(l,mid),solve(mid,r)); m=0; for(i=l;i<=r;i++) { if(vex[i].x-vex[mid].x<=d&&vex[i].x-vex[mid].x>=-d) vex2[m++]=vex[i]; } sort(vex2,vex2+m,cmpy); for(i=0;i<m;i++) for(j=i+1;j<m;j++) { if(vex2[j].y-vex2[i].y>=d) break; d=min(d,dis(vex2[i],vex2[j])); } return d;}int main (){ int n; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(int i=0;i<n;i++) { scanf("%lf%lf",&vex[i].x,&vex[i].y); } sort(vex,vex+n,cmpx); double ans=solve(0,n-1); printf("%.2lf\n",ans/2); } return 0;}空间最近点对 模板 有待改进 关于分治时的以y的大小排序的改进 算法导论上说可以一次性排序 而不需要重新再排 没看懂,,,,,,
0 0
- zoj2107
- zoj2107——Quoit Design
- zoj2107 最近点对问题 分治思想
- ACM-计算几何之Quoit Design——hdu1007 zoj2107
- ZOJ2107——Quoit Design&&HDU1007——Quoit Design
- @inject依赖注入的过程
- 利用反射获取方法的反回值类型和参数个数
- Python3打包成单个exe文件
- c语言之静态局部变量,静态全局变量和静态函数
- 理解Oracle Fusion Middleware中的关键概念
- zoj2107
- 内网端口映射之内网发布网站应用
- C++笔记之多态中的虚函数
- 安卓学习140501:组件——Broadcast Receivers
- Ubuntu 编译Qt
- ZJUOJ 1073 Round and Round We Go
- 2014年4月28日 谁来保证我们的水安全
- USACO Section 4.2 Job Processing
- android数据存储_SharedPreferences