Pagini recente » Cod sursa (job #1214929) | Istoria paginii utilizator/boiciucandrei | Cod sursa (job #2020883) | Cod sursa (job #410849) | Cod sursa (job #385616)
Cod sursa(job #385616)
#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;
}