Pagini recente » Cod sursa (job #1262024) | Cod sursa (job #1438021) | Cod sursa (job #2456990) | Cod sursa (job #1385093) | Cod sursa (job #1163764)
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#define nmax 100005
#define INF ~(1LL<<63)
using namespace std;
int n;
pair <int, int> X[nmax], Y[nmax];
vector <pair <int, int> > P;
long long dist(pair<int, int> a, pair<int, int> b)
{
return 1LL*(a.first - b.first)*(a.first - b.first) + 1LL*(a.second - b.second)*(a.second - b.second);
}
void citire()
{
scanf("%d",&n);
for (int i=0; i<n; i++)
scanf("%d %d",&X[i].first, &X[i].second);
sort(X, X+n);
for (int i=0; i<n; i++)
{
Y[i].first = X[i].second;
Y[i].second = X[i].first;
}
}
long long cmap(int st, int dr)
{
if (dr - st <= 1)
return INF;
if(dr - st == 2)
{
if(Y[st] > Y[st+1])
swap(Y[st], Y[st+1]);
return dist(Y[st], Y[st+1]);
}
int mid = (st + dr)/2;
long long minim = min(cmap(st, mid), cmap(mid, dr));
P.clear();
for(int i = st; i < dr; i++)
if(abs(X[mid].first - Y[i].second) <= minim)
P.push_back(Y[i]);
for(int i = 0; i < P.size(); i++)
for(int j = i+1; j < P.size() && j-i < 8; j++)
minim = min(minim, dist(P[i], P[j]));
return minim;
}
int main()
{
freopen("cmap.in","r",stdin);
freopen("cmap.out","w",stdout);
citire();
long long d = cmap(0, n);
double afis = sqrt(d);
printf("%lf\n",afis);
return 0;
}