#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
/* define */
#define sf(a) scanf("%d",&a)
#define sff(a) scanf("%lf",&a)
#define sf3(a,b,c) scanf("%d%d%d",&(a),&(b),&(c))
#define sfs(a) scanf("%s",a)
#define clr(a) memset(a,0,sizeof(a))
#define pf(a) printf("%d\n",a)
#define pfI(a) printf("%I64d\n",a)
#define pfs(a) printf(a);
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define rep1(i,a,b) for(int i=(a);i<(b);i++)
#define repd(i,a,b) for(int i=(a);i>=(b);i--)
/* define */
/* num theory */
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
/* num theory */
typedef long long ll;
typedef pair<double, double> P;
const int inf = 99999999;
const int Max_N =100010;
int N;
P A[Max_N];
bool cmp_y(P a,P b){
return a.second<b.second;
}
double clo_pair(P* a,int n){
if(n<=1) return inf;
int m=n/2;
double x=a[m].first;
double d=min(clo_pair(a,m),clo_pair(a+m,n-m));
inplace_merge(a,a+m,a+n,cmp_y);
vector<P> b;
for(int i=0;i<n;i++){
if(fabs(a[i].first-x)>=d)
continue;
int sz=b.size();
for(int j=sz-1;j>=0;j--){
double dx=a[i].first-b[j].first;
double dy=a[i].second-b[j].second;
if(dy>=d) break;
d=min(d,sqrt(dx*dx+dy*dy));
}
b.push_back(a[i]);
}
return d;
}
int main(){
while(~sf(N) && N){
for(int i=0;i<N;i++){
sff(A[i].first);
sff(A[i].second);
}
sort(A,A+N);
printf("%.2f\n",clo_pair(A,N)/2);
}
return 0;
}
hdu 1007 Quoit Design(分治法)
最新推荐文章于 2019-07-31 11:35:45 发布