Cod sursa(job #1471546)

Utilizator SilviuIIon Silviu SilviuI Data 14 august 2015 12:36:31
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <cstring>
#include <limits.h>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
#include <bitset>
#include <string>
#include <vector>
#include <math.h>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include <deque>
#define nmax 100010
#define inf 0x3f3f3f3f
#define mp make_pair
using namespace std;
typedef long long ll;
struct date { ll x,y; };
int n,i,j;
double sol;
date t[nmax];
inline double abs(double x) { if (x<0) return (-x); else return x; }
inline double min(double x,double y) { if (x<y) return x; else return y; }
double sqr(double x) { return (x*x); }
bool cmp(date x,date y)
{
    if (x.x==y.x) return (x.y<y.y); else
        return (x.x<y.x);
}
double distan(date x,date y)
{
    return sqrt(sqr(double(x.x-y.x))+sqr(double(x.y-y.y)));
}
ll ok(date x,date y)
{
    if (x.x==y.x) return abs(double(y.y-x.y)); else
        return abs(x.x-y.x);
}
int main() {
freopen("cmap.in","r",stdin);
freopen("cmap.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d %d",&t[i].x,&t[i].y);
sort(t+1,t+n+1,cmp); sol=1e16;
for (i=1;i<=n;i++)
    for (j=i+1;j<=n && ok(t[i],t[j])<sol;j++)
        if (abs(double(t[j].y-t[i].y))<sol) sol=min(sol,distan(t[j],t[i]));
printf("%f",sol);
return 0;
}