Cod sursa(job #1712750)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 3 iunie 2016 16:45:51
Problema Cele mai apropiate puncte din plan Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
/**
  *  Worg
  */
#include <cmath>
#include <cstdio>
#include <utility>
#include <algorithm>

using namespace std;
FILE *fin = freopen("cmap.in", "r", stdin);
FILE *fout = freopen("cmap.out", "w", stdout);

const int MAX_N = 1 + 100000;

/*--------------------------*/
pair< int, int > vec[MAX_N];
int N;

double SOL = 20000000000000;
/*--------------------------*/


void readData() {
    scanf("%d", &N);
    for(int i = 1; i <= N; i++) {
        scanf("%d%d", &vec[i].first, &vec[i].second);
    }
}

double dist(int a, int b) {
    return sqrt((double) 1LL * (vec[a].first - vec[b].first) * (vec[a].first - vec[b].first) +
                (double) 1LL * (vec[a].second - vec[b].second) * (vec[a].second - vec[b].second));
}

void getSol() {
    for(int i = 1; i < N; i++) {
        for(int j = i + 1; j <= N && vec[j].first - vec[i].first <= SOL; j++) {
            SOL = min(SOL, dist(i, j));
        }
    }
}

int main() {
    readData();
    sort(vec + 1, vec + N + 1);
    getSol();
    for(int i = 1; i <= N; ++i) {
        swap(vec[i].first, vec[i].second);
    }
    sort(vec + 1, vec + N + 1);
    getSol();

    printf("%.9lf", SOL);

    return 0;
}