标签:des style blog http io ar color os sp
3年前刚接触ACM的时候做的这一题,交了几十次怎么写都过不了.........
今天无意中又看到了这一题,随手一写终于过了.....
2 0 0 1 1 2 1 1 1 1 3 -1.5 0 0 0 0 1.5 0
0.71 0.00 0.75
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const double eps=1e-8; const int maxn=100100; int n; int dcmp(double x) { if(fabs(x)<eps) return 0; return (x>0)?1:-1; } struct Point { double x,y; }p[maxn],temp[maxn]; bool cmpxy(Point a,Point b) { if(dcmp(a.x-b.x)!=0) return dcmp(a.x-b.x)<0; return dcmp(a.y-b.y)<0; } bool cmpy(Point a,Point b) { return dcmp(a.y-b.y)<0; } inline double square(double x) { return x*x; } double dist(Point a,Point b) { return sqrt(square(a.x-b.x)+square(a.y-b.y)); } double Close_pair(int left,int right) { double d=1e30; if(left==right) return d; if(left+1==right) return dist(p[left],p[right]); int mid=(left+right)/2; d=min(Close_pair(left,mid),Close_pair(mid+1,right)); int k=0; for(int i=left;i<=right;i++) { if(dcmp(square(p[i].x-p[mid].x)-d)<=0) { temp[k++]=p[i]; } } sort(temp,temp+k,cmpy); for(int i=0;i<k;i++) { for(int j=i+1;j<k&&dcmp(square(temp[i].y-temp[j].y)-d)<0;j++) { d=min(d,dist(temp[i],temp[j])); } } return d; } int main() { while(scanf("%d",&n)!=EOF&&n) { for(int i=0;i<n;i++) { double x,y; scanf("%lf%lf",&x,&y); p[i].x=x;p[i].y=y; } sort(p,p+n,cmpxy); printf("%.2lf\n",Close_pair(0,n-1)/2.); } return 0; }
标签:des style blog http io ar color os sp
原文地址:http://blog.csdn.net/ck_boss/article/details/41646169