hud1007 Quoit Design
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<string> 7 #include<cmath> 8 #include<ctime> 9 #include<queue> 10 #include<stack> 11 #include<map> 12 #include<set> 13 #define rre(i,r,l) for(int i=(r);i>=(l);i--) 14 #define re(i,l,r) for(int i=(l);i<=(r);i++) 15 #define Clear(a,b) memset(a,b,sizeof(a)) 16 #define inout(x) printf("%d",(x)) 17 #define douin(x) scanf("%lf",&x) 18 #define strin(x) scanf("%s",(x)) 19 #define LLin(x) scanf("%lld",&x) 20 #define op operator 21 #define CSC main 22 typedef unsigned long long ULL; 23 typedef const int cint; 24 typedef long long LL; 25 using namespace std; 26 double f(const long double &a){return a*a;} 27 const double inf=2147483647; 28 void inin(int &ret) 29 { 30 ret=0;int f=0;char ch=getchar(); 31 while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();} 32 while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar(); 33 ret=f?-ret:ret; 34 } 35 struct xl 36 { 37 double x,y; 38 void in(){douin(x),douin(y);} 39 xl(double x=0,double y=0):x(x),y(y){} 40 bool op < (const xl &rhs)const {return x==rhs.x?y<rhs.y:x<rhs.x;} 41 }; 42 xl di[100010]; 43 int wocao[100010]; 44 int n,top; 45 bool com(const int &a,const int &b) 46 { 47 return di[a].y<di[b].y; 48 } 49 double dis(const xl &a,const xl &b) 50 { 51 return sqrt(f(a.x-b.x)+f(a.y-b.y)); 52 } 53 double mindis(int l,int r) 54 { 55 double ret=inf; 56 if(l==r)return ret; 57 if(r-l+1<=3) 58 { 59 re(i,l,r)re(j,i+1,r) 60 ret=min(ret,dis(di[i],di[j])); 61 return ret; 62 } 63 int mid=(l+r)>>1; 64 ret=min(mindis(l,mid),mindis(mid+1,r)); 65 top=0; 66 re(i,l,r) 67 { 68 double temp=abs(di[mid].x-di[i].x); 69 if(temp<=ret)wocao[++top]=i; 70 } 71 sort(wocao+1,wocao+top+1,com); 72 re(i,1,top) 73 re(j,i+1,top) 74 { 75 if(di[wocao[j]].y-di[wocao[i]].y>=ret)break; 76 ret=min(ret,dis(di[wocao[i]],di[wocao[j]])); 77 } 78 top=0; 79 return ret; 80 } 81 int main() 82 { 83 while(~scanf("%d",&n)&&n) 84 { 85 re(i,1,n)di[i].in(); 86 sort(di+1,di+n+1); 87 printf("%.2f\n",mindis(1,n)/2); 88 } 89 return 0; 90 }