Cod sursa(job #2222369)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 16 iulie 2018 22:13:26
Problema Cele mai apropiate puncte din plan Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <climits>
#define x first
#define y second
using namespace std;

const int Dim = 100005;
pair<int,int> v[Dim];
long long dist_p(int a,int b){
    return 1LL*(v[a].x-v[b].x)*(v[a].x-v[b].x)+1LL*(v[a].y-v[b].y)*(v[a].y-v[b].y);
}
void Get (int &x);

int main(){
    freopen("cmap.in","r",stdin);
    freopen("cmap.out","w",stdout);
    int n;
    Get(n);
    for(int i = 1;i <= n;++i)
        Get(v[i].x), Get(v[i].y);
    sort(v+1,v+n+1);
    long long Min=dist_p(1,2);
    for(int i = 1;i <= n;++i)
        for(int j = i + 1;j <= n;++j){
            if(1LL*(v[j].x-v[i].x)*(v[j].x-v[i].x)>Min)
                break;
            long long d=dist_p(i,j);
            if(d<Min) Min=d;
    }
    printf("%.6f",sqrt(Min) );
    return 0;
}

const int Lim = 8000000;
int u =  Lim - 1;
char s[Lim];

void Next () {
    if (++u == Lim)
        std::fread(s, 1, Lim, stdin), u = 0;
}

void Get (int &x) {
    x = 0;
    bool minu = false;
    for (; s[u] < '0' || s[u] > '9'; Next());
    if ( s[u-1] == '-')
        minu = true;
    for (x = 0; s[u] >= '0' && s[u] <= '9'; Next())
           x = x * 10 + s[u] - '0';
    if ( minu == true)
    x *= -1;
}