Cod sursa(job #1402099)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 26 martie 2015 12:28:45
Problema Cele mai apropiate puncte din plan Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 2.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;
long long minim = INF;
std::vector< std::pair<int,int> > a;
std::vector< int > b;
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>(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)))
        {
            b.clear();
            b.push_back(i);
            minim = 1LL*(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second));
        }
        else if(minim==(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)))
        {
            b.push_back(i);
        }
    }
    sort(a.begin(),a.end(),CMPY);
    for(int i=0;i<a.size()-1;++i)
    {
        if(minim>(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)))
        {
            b.clear();
            b.push_back(i);
            minim = 1LL*(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second));
        }
        else if(minim==(1LL*(a[i].first-a[i+1].first)*(a[i].first-a[i+1].first)+1LL*(a[i].second-a[i+1].second)*(a[i].second-a[i+1].second)))
        {
            b.push_back(i);
        }
    }
    /*for(int i=1;;++i)
    {
        if(1LL*i*i>minim)
        {
            minim = minim - 1LL*(i-1)*(i-1);
            printf("%d.",i-1);
            for(int j=547165;j<1000000;++j)
            {
                if(minim-1LL*(i-1)*(float)(j/1000000)+1LL*(float)(j/1000000)*(float)(j/1000000)==0)
                {
                    printf("%f",(float)(j/1000000));
                    break;
                }
            }
            break;
        }
    }*/
    printf("%f",sqrt(minim));
    return 0;
}