hdoj1007

来源:互联网 发布:淘宝修改我的评价 编辑:程序博客网 时间:2024/06/05 21:12
#include"iostream"#include"algorithm"#include"stdio.h"using namespace std;const int vexnum=110000;struct point{double x,y;};bool cmpx(point &a,point&b){return a.x<b.x;}bool cmpy(point &a,point &b){return a.y<b.y;}double space(point &a,point &b){return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}double minp(double a,double b){return a<b?a:b;}double f(int l,int r,point*a,point *mid){if(r-l==1) return space(a[r],a[l]);if(r-l==2) return minp(minp(space(a[l],a[l+1]),space(a[l],a[r])),space(a[l+1],a[r]));int m=(l+r)/2;double d=minp(f(l,m,a,mid),f(m+1,r,a,mid));int i,cnd=0,j;for(i=l;i<=r;i++){if(a[i].x<a[m].x+d&&a[i].x>a[m].x-d)mid[cnd++]=a[i];}sort(mid,mid+cnd,cmpy);for(i=0;i<cnd;i++)for(j=i+1;j<cnd;j++){if(mid[j].y-mid[i].y>d)break;d=minp(d,space(mid[i],mid[j]));}return d;}int main(){//freopen("a.txt","r",stdin);point a[vexnum],mid[vexnum];int n,i;while(cin>>n&&n){for(i=0;i<n;i++)cin>>a[i].x>>a[i].y;sort(a,a+n,cmpx);double min=f(0,n-1,a,mid); printf("%0.2f\n",sqrt(min)/2);}return 0;}

0 0
原创粉丝点击