Pagini recente » Cod sursa (job #758952) | Borderou de evaluare (job #431569) | Cod sursa (job #1086598) | Cod sursa (job #3150955) | Cod sursa (job #1035706)
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define INF 2000000000
#define NMAX 100003
struct punct
{
int x,y;
};
int n;
punct v[NMAX],a[NMAX];
inline bool cmp(const punct &a,const punct &b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
inline double dist(int i,int j)
{
return sqrt((v[i].x-v[j].x)*(v[i].x-v[j].x) + (v[i].y-v[j].y)*(v[i].y-v[j].y));
}
inline double caz3(int l,int r)
{
double sol=INF;
if(r-l+1>=2)
sol=dist(l,l+1);
if(r-l+1==3)
{
sol=min(sol,dist(l,l+2));
sol=min(sol,dist(l+1,l+2));
}
return sol;
}
double rez(int l,int r)
{
double sol=INF;
if(r-l+1<=3)
{
sol=caz3(l,r);
return sol;
}
int med=(l+r)>>1;
sol=min(rez(l,med) , rez(med+1,r));
return sol;
}
int main()
{
freopen("cmap.in","r",stdin);
freopen("cmap.out","w",stdout);
int i;
double sol;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d%d",&v[i].x,&v[i].y);
sort(v+1,v+1+n,cmp);
sol=rez(1,n);
printf("%lf\n",sol);
return 0;
}