Pagini recente » Cod sursa (job #317516) | Cod sursa (job #12474) | Cod sursa (job #1793009) | Cod sursa (job #3218835) | Cod sursa (job #206302)
Cod sursa(job #206302)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N_MAX = 50010;
int N;
int x[N_MAX], y[N_MAX];
int dmin(int v[N_MAX], int l)
{
int st = 0, dr = l, inc = 1, sf = 1, dstst = 0, dstdr = 0;
for (int i = 1; i <= N; i ++) {
if (v[i] < st) dstst += (st - v[i]);
if (v[i] > dr) dstdr += (v[i] - dr);
}
while (v[inc] < st) inc ++;
while (v[sf] <= dr) sf ++;
int MIN = dstst + dstdr, sum = dstst + dstdr;
for (int i = 1; i <= v[N]; i ++) {
st ++, dr ++;
while (v[inc] < st) inc ++;
while (v[sf] <= dr && sf <= N) sf ++, sum --;
sum += (inc - 1);
sum -= (N - sf + 1);
if (sum < MIN) MIN = sum;
}
return MIN;
}
int main()
{
freopen("tribute.in", "r", stdin);
#ifndef _SCREEN_
freopen("tribute.out", "w", stdout);
#endif
int DX, DY;
scanf("%d %d %d\n", &N, &DX, &DY);
for (int i = 1; i <= N; i ++) {
scanf("%d %d\n", &x[i], &y[i]);
}
sort(x + 1, x + N + 1);
sort(y + 1, y + N + 1);
printf("%d\n", dmin(x, DX) + dmin(y, DY));
return 0;
}