Cod sursa(job #1069321)

Utilizator raulmuresanRaul Muresan raulmuresan Data 29 decembrie 2013 19:52:57
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include<fstream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>


using namespace std;
long long  int i,n,j,k,cont,rent,t,q,p,ok,z,verif,sum;
 double x,y,minim;

struct coada
{
    double x,y;
    int val;
};
coada c[100090],aux;


bool cmp(coada i,coada j)
{
    //functie de comparare aici atan2 - care e defapt tangata unghiului.
    return atan2(i.y-y,i.x-x)<atan2(j.y-y,j.x-x);
}

double dist(int x1, int y1, int x2, int y2) {
	return sqrt (double((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));
}
long double mini(long double x,long double y)
{
    if(x>y) return y;
    return x;
}

int main()
{
    freopen ("cmap.in","r",stdin);
    freopen ("cmap.out","w",stdout);
    scanf("%lld",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lf%lf",&c[i].x,&c[i].y);
        //printf("%lf %lf\n",c[i].x,c[i].y);
        x+=c[i].x;
        y+=c[i].y;
        c[i].val=i;

    }
   x=x/n;
   y=y/n;

    sort(c+1,c+n+1,cmp);
   c[n+1]=c[1];
   minim=100000000;
 //  printf("%lf\n",dist(c[1].x,c[1].y,c[2].x,c[2].y));
   for(i=1;i<=n;i++)
   {
      // minim=mini(minim,dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y));
      /* if(dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y) < minim)
       minim=dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y);*/

      //printf("%lf\n",dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y));
      if(dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y) < minim){
       minim=dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y);
       //printf("ok");
      }

   }
   printf("%llf\n",minim);
}