Pagini recente » Cod sursa (job #1882384) | Cod sursa (job #2969170)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cmap.in");
ofstream out("cmap.out");
vector<pair<double, double>> pts;
int n;
double dx, dy;
double closePair() {
double mini = 1e9, d;
sort(pts.begin(), pts.end());
set<pair<double, double>> s;
int j = 0;
for(int i = 0; i < n; i++) {
d = ceil(mini);
while(pts[i].first - pts[j].first >= d) {
s.erase({pts[j].second, pts[j].first});
j++;
}
auto it1 = s.lower_bound({pts[i].second - d, pts[i].first});
auto it2 = s.upper_bound({pts[i].second + d, pts[i].first});
for(auto it = it1; it != it2; it++) {
dx = pts[i].first - it->second;
dy = pts[i].second - it->first;
mini = min(mini,sqrt(dx * dx + dy * dy));
}
s.insert({pts[i].second, pts[i].first});
}
return mini;
}
int main() {
in >> n;
for(int i = 0; i < n; i++) {
in >> dx >> dy;
pts.push_back({dx, dy});
}
out << setprecision(6) << fixed << closePair();
return 0;
}