Pagini recente » Cod sursa (job #536609) | Cod sursa (job #1950630) | Cod sursa (job #779415) | Cod sursa (job #2041081) | Cod sursa (job #1969723)
#include <stdio.h>
#include <math.h>
int x[50000],y[50000];
int compare(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n,l,w,i,j,sus,jos=0,st=0,dr=0,r,p,s=0,pozx,pozy,ans=0;
FILE*fi,*fo;
fi=fopen("tribute.in","r");
fo=fopen("tribute.out","w");
fscanf(fi,"%d%d%d",&n,&l,&w);
for(i=0;i<n;i++){
fscanf(fi,"%d%d",&x[i],&y[i]);
}
qsort(x,n,sizeof(int),compare);
qsort(y,n,sizeof(int),compare);
p=1<<16;
r=0;
while(p>0){
if(r+p<50001)
{
i=r+p;
jos=0;
sus=0;
for(i=0;i<n;i++)
{
if(x[i]<r+p){
sus++;
}
else if(x[i]<=r+p+l && x[i]>=r+p)
{
jos--;
}
else jos++;
}
if(sus<jos){
r+=p;
}
}
p/=2;
}
pozx=r+1;
p=1<<16;
r=0;
while(p>0){
if(r+p<50001)
{
i=r+p;
dr=0;
st=0;
for(i=0;i<n;i++)
{
if(y[i]<r+p){
st++;
}
else if(y[i]<=r+p+w && y[i]>=r+p)
{
dr--;
}
else dr++;
}
if(st<dr){
r+=p;
}
}
p/=2;
}
pozy=r+1;
for(i=0;i<n;i++)
{
if(x[i]<pozx)
s+=pozx-x[i];
else if(x[i]>pozx+l)
s+=x[i]-pozx-l;
if(y[i]<pozy)
s+=pozy-y[i];
else if(y[i]>pozy+w)
s+=y[i]-pozy-w;
}
if(l>2)
s--;
fprintf(fo,"%d",s);
fclose(fi);
fclose(fo);
return 0;
}