Cod sursa(job #3341860)

Utilizator Laura721Laura Kudor Laura721 Data 21 februarie 2026 13:19:49
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream fin("cmap.in");
ofstream fout("cmap.out");
const int nmax=100000;
const int oo=INT_MAX;
pair <int,int> point[nmax+5],newpoint[nmax+5]; int n,k;
void read(){
    fin>>n;
    for(int i=1;i<=n;i++){
        int x,y;
        fin>>x>>y;
        point[i]=make_pair(x,y);
    }
    sort(point+1,point+n+1);
}
long long dist(pair <int,int> a,pair <int,int> b){
    return (a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second);
}
long long dei(int left,int right){
    if(left==right)
        return oo;
    if(left==right-1)
        return dist(point[left],point[right]);
    int mid=(left+right)/2;
    long long a=dei(left,mid);
    long long b=dei(mid+1,right);
    long long Min=min(a,b);
    for(int i=left,k=0;i<=right;++i){
        if(abs(point[i].first-point[mid].first)<Min)
            newpoint[++k]=point[i];
    }
    for(int i=1;i<=k;++i)
        for(int j=i+1;j<=k;++j)
            Min=min(Min,dist(newpoint[i],newpoint[j]));
    return Min;
}
int main()
{
    read();
    fout<<fixed<<setprecision(6)<<sqrt(dei(1,n))<<"\n";
    return 0;
}