Pagini recente » Cod sursa (job #2702732) | Cod sursa (job #2383595) | Cod sursa (job #1380851) | Cod sursa (job #701527) | Cod sursa (job #1364200)
#include<cstdio>
#include<string>
#include<set>
#include<algorithm>
#include<cmath>
using namespace std;
#ifdef HOME
const string inputFile = "input.txt";
const string outputFile = "output.txt";
#else
const string problemName = "cmap";
const string inputFile = problemName + ".in";
const string outputFile = problemName + ".out";
#endif
typedef pair<int, int> PII;
const int INF = (1 << 30);
const int NMAX = 100000 + 5;
struct cmp {
bool operator()(const PII &A, const PII &B) const {
return A.second < B.second;
}
};
int N;
PII P[NMAX];
double sol;
set<PII, cmp> S;
double dist(PII A, PII B) {
return sqrt((A.first - B.first) * (A.first - B.first) + (A.second - B.second) * (A.second - B.second));
}
int main() {
int i, j;
freopen(inputFile.c_str(), "r", stdin);
freopen(outputFile.c_str(), "w", stdout);
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%d%d", &P[i].first, &P[i].second);
sort(P + 1, P + N + 1);
sol = INF;
for(i = j = 1; i <= N; i++) {
while(j < i && P[j].first + sol < P[i].first) {
S.erase(P[j]);
j++;
}
auto p = S.lower_bound(make_pair(0, P[i].second - sol - 1));
for(auto it = p; it != S.end() && P[i].second + sol > it->second; it++)
sol = min(sol, dist(*it, P[i]));
S.insert(P[i]);
}
printf("%.10f\n", sol);
return 0;
}