Cod sursa(job #385616)

Utilizator mihaionlyMihai Jiplea mihaionly Data 23 ianuarie 2010 10:20:55
Problema Tribute Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <math.h>
#define nmax 50001
int n,dx,dy,X[nmax],Y[nmax];
float mx,my;
#define abs(x) (((x)>0)?(x):(-(x)))
#define min(a,b) ((a<b)?(a):(b))
void read()
 {
 FILE *f=fopen("teren.in","r");
 fscanf(f,"%d %d %d",&n,&dx,&dy);
 for(int i=1;i<=n;i++)
  fscanf(f,"%d %d",&X[i],&Y[i]);
 }
int calc(int V[],int p,int dist)
 {
 int d1,d2,cs,cd;
 d1=d2=0;
 cs=p-dist;
 cd=p;
 int i;
 if(cs>=0)
  {
  for(i=1;i<=n;i++)
   {
   if(cs>V[i])
	d1+=abs(cs-V[i]);
   else if(cd<V[i])
	d1+=abs(cd-V[i]);
   }
  }
 cs=p;
 cd=p+dist;
 for(i=1;i<=n;i++)
  {
  if(cs>V[i])
   d2+=abs(cs-V[i]);
  else if(cd<V[i])
   d2+=abs(cd-V[i]);
  }
 return min(d1,d2);
 }
void solve()
 {
 int i,x,aux,y,minx,miny;
 for(i=1;i<=n;i++)
  {
  mx+=X[i];
  my+=Y[i];
  }
 mx/=n;
 my/=n;
 x=floor(mx);
 minx=calc(X,x,dx);
 x=ceil(mx);
 aux=calc(X,x,dx);
 if(aux<minx)
  minx=aux;
 y=floor(my);
 miny=calc(Y,y,dy);
 y=ceil(my);
 aux=calc(Y,y,dy);
 if(aux<miny)
  aux=miny;
 FILE *g=fopen("teren.out","w");
 fprintf(g,"%d",(minx+miny));
 }
int main()
 {
 read();
 solve();
 return 0;
 }