Pagini recente » Cod sursa (job #1788561) | Cod sursa (job #619455) | Cod sursa (job #285646) | Cod sursa (job #24927) | Cod sursa (job #271024)
Cod sursa(job #271024)
#include <cstdio>
#include <cstring>
#define MAX_N 50005
#define lsb(x) x & (-x)
int X[MAX_N], Y[MAX_N], A[MAX_N];
int N, dx, dy;
void citire()
{
scanf("%d %d %d\n",&N, &dx, &dy);
for(int i = 1; i <= N; ++i)
{
scanf("%d %d",X+i, Y+i);
++X[i];
++Y[i];
}
}
long long solve(int X[MAX_N], int d)
{
memset(A, 0, sizeof A);
for(int i = 1; i <= N; ++i)
++A[X[i]];
long long S = 0;
int min = MAX_N, max = 0;
for(int i = 1; i <= N; ++i)
{
if(X[i] < min) min = X[i];
if(X[i] > max) max = X[i];
}
for(int i = min; i <= max; ++i)
A[i] += A[i-1];
for(int i = 1; i <= N; ++i)
if(X[i] > min + d)
S += (X[i] - min - d);
long long smin = S;
for(int i = min + 1; i <= max - d; ++i)
{
S += A[i-1];
S -= (A[max] - A[i + d - 1]);
if(smin > S) smin = S;
}
return smin;
}
int main()
{
freopen("tribute.in","rt",stdin);
freopen("tribute.out","wt",stdout);
citire();
printf("%lld\n",(long long)solve(X,dx) + (long long)solve(Y,dy));
}