Cod sursa(job #757638)

Utilizator andreimaresuMaresu Andrei andreimaresu Data 12 iunie 2012 20:04:35
Problema Tribute Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#include<stdlib.h>
long int suma(long int *x,long int N,long int DX){
long int m=0,s=0,s1=0,i,x1,x2;
for(i=0;i<N;i++)
m+=x[i];
m=m/N;
for(i=0;i<N;i++){
s+=abs(x[i]-m);
s1+=abs(x[i]-m-1);
}
if(s>s1) x2=x1=m+1;
        else x2=x1=m;

for(i=1;i<=DX;i++){
s=s1=0;
for(i=0;i<N;i++){
s+=abs(x[i]-x1+1);
s1+=abs(x[i]-x2-1);
}
if(s>s1) x2++;
        else x1--;
}

s=s1=0;
for(i=0;i<N;i++){
if (abs(x[i]-x1)>abs(x[i]-x2)) s+=abs(x[i]-x2);
            else s+=abs(x[i]-x1);
            }
return s;
}
int main(){
long int N,DX,DY,*x,*y,x1,x2,y1,y2,i,s;
FILE *f=fopen("tribute.in","r"),*g=fopen("tribute.out","w");
fscanf(f,"%ld %ld %ld",&N,&DX,&DY);
x=malloc(N*sizeof(int));
y=malloc(N*sizeof(int));
for(i=0;i<N;i++)
fscanf(f,"%ld %ld",&x[i],&y[i]);
s=suma(y,N,DY)+suma(x,N,DX);
fprintf(g,"%ld",s);
fclose(f);
fclose(g);
return 0;
}