Cod sursa(job #610098)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 24 august 2011 20:25:19
Problema Tribute Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 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],m,l,k;

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];}
merge(a,1,n);
m=(a[1]+a[n])/2;
l=k=0;
for(i=1;i<=n;i++)
if(a[i]>m)
      l++;
else
      if(a[i]<m)
              k++;
x1=m+l-k;
merge(b,1,n);
m=(b[1]+b[n])/2;
l=k=0;
for(i=1;i<=n;i++)
if(b[i]>m)
      l++;
else
      if(b[i]<m)
              k++;
y1=m+l-k;
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;}