Cod sursa(job #607483)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 august 2011 12:16:21
Problema Tribute Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#define N 50001
long n,i,x[N],y[N],s1,s2,x1,x2,y1,y2,e,dx,dy,a[N],b[N],c[N];
void merge(long a[N],long p,long q)
{long m=(p+q)/2,i,j,k;
if(p==q)
      return;
merge(a,p,m);
merge(a,m+1,q);
for(i=p,j=m+1,k=p;i<=m||j<=q;)
if(j>q||(i<=m&&a[i]<a[j]))
      c[k++]=a[i++];
else
      c[k++]=a[j++];
for(i=p;i<=q;i++)
      a[i]=c[i];}

int main()
{freopen("tribute.in","r",stdin);
freopen("tribute.out","w",stdout);
scanf("%ld%ld%ld",&n,&dx,&dy);
for(i=1;i<=n;i++)
      {scanf("%ld%ld",&x[i],&y[i]);
      a[i]=x[i],b[i]=y[i],s1+=x[i],s2+=y[i];}
merge(a,1,n);
merge(b,1,n);
x1=((s1/n)+a[(n+1)/2])/2-(dx/2);
y1=((s2/n)+b[(n+1)/2])/2-(dy/2);
if(x1<0)
      x1=0;
if(y1<0)
      y1=0;
x2=x1+dx,y2=y1+dy;
for(i=1;i<=n;i++)
      {if(x[i]<x1)
             e+=x1-x[i];
      if(x[i]>x2)
             e+=x[i]-x2;
      if(y[i]<y1)
             e+=y1-y[i];
      if(y[i]>y2)
             e+=y[i]-y2;}
printf("%ld\n",e);
return 0;}