Cod sursa(job #1401969)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 26 martie 2015 11:25:22
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <utility>
#define INF (1LL<<62)
using namespace std;
int n,x,y;
double minim = 1<<30;
std::vector< std::pair<int,int> > a;
bool CMPX(std::pair<int,int> A,std::pair<int,int> B)
{
    if(A.first<B.first)return true;
    else if(A.first==B.first&&A.second<B.second)return true;
    else return false;
}
bool CMPY(std::pair<int,int> A,std::pair<int,int> B)
{
    if(A.second<B.second)return true;
    else if(A.second==B.second&&A.first<B.first)return true;
    else return false;
}
int main()
{
    freopen("cmap.in","r",stdin);
    freopen("cmap.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d %d",&x,&y);
        a.push_back( std::make_pair(x,y) );
    }
    sort(a.begin(),a.end(),CMPX);
    for(int i=0;i<a.size()-1;++i)
    {
        if(minim>(sqrt((a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second))))
        {
            minim = (sqrt((a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)));
        }
    }
    sort(a.begin(),a.end(),CMPY);
    for(int i=0;i<a.size()-1;++i)
    {
        if(minim>(sqrt((a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second))))
        {
            minim = (sqrt((a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)));
        }
    }
    printf("%f",minim);
    return 0;
}