Pagini recente » Borderou de evaluare (job #667029) | Cod sursa (job #743668) | Cod sursa (job #2443896) | Cod sursa (job #2742579) | Cod sursa (job #1946019)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
#define pii pair <int, int>
#define f first
#define s second
using namespace std;
pii v[100010];
vector <int> p;
long long dist (int st, int dr)
{
return (1LL * (v[dr].f - v[st].f) * (v[dr].f - v[st].f) + 1LL * (v[dr].s - v[st].s) * (v[dr].s - v[st].s));
}
void del ()
{
vector <int> aux;
aux.swap (p);
}
long long aabs (int a)
{
return 1LL * max (a, -a);
}
long long divide (int st, int dr)
{
if (dr - st + 1 <= 3)
{
if (dr - st + 1 == 2) return dist (st, dr);
else return min (min (dist (st, st + 1), dist (st, st + 2)), dist (st + 1, st + 2));
}
int mij = (st + dr) >> 1;
long long bst = min (divide (st, mij), divide (mij + 1, dr));
del ();
for (int i = st; i <= dr; ++i)
if (aabs (v[mij].f - v[i].f) <= bst) p.push_back (i);
for (int i = 0; i < p.size (); ++i)
for (int j = i + 1; j <= i + 7 && j < p.size (); ++j)
bst = min (bst, dist (p[i], p[j]));
return bst;
}
int main ()
{
freopen ("cmap.in", "r", stdin);
freopen ("cmap.out", "w", stdout);
int n;
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d %d", &v[i].f, &v[i].s);
sort (v + 1, v + n + 1);
printf ("%.8f\n", sqrt (1LL * divide (1, n)));
return 0;
}