Pagini recente » Cod sursa (job #45787) | Cod sursa (job #815085) | Cod sursa (job #337928) | Cod sursa (job #3147945) | Cod sursa (job #2190432)
#include <bits/stdc++.h>
using namespace std;
struct punct {int x; int y;};
const int MAXN = 50000, INF = 1e9;
punct a[MAXN + 1];
int car[MAXN + 1], nrst[MAXN + 1], nrdr[MAXN + 1], sumst[MAXN + 1], sumdr[MAXN + 1];
int n, dx, dy;
FILE *fin, *fout;
int solv () {
int xmax, i, mn;
xmax = 0;
for (i = 1; i <= n; i++) {
car[a[i].x]++;
xmax = max (xmax, a[i].x);
}
for (i = 0; i <= xmax; i++) {
nrst[i] = nrst[i - 1] + car[i];
sumst[i] = sumst[i - 1] + nrst[i - 1];
}
for (i = xmax - dx + 1; i >= 0; i--) {
nrdr[i] = nrdr[i + dx] + car[i];
sumdr[i] = sumdr[i + dx] + nrdr[i + dx];
}
mn = INF;
for (i = 0; i + dx - 1<= xmax; i++) {
mn = min (mn, sumdr[i + dx] + sumst[i]);
}
for (i = 0; i <= xmax; i++)
sumdr[i] = sumst[i] = nrst[i] = nrdr[i] = car[i] = 0;
return mn;
}
int main() {
int sol, i;
fin = fopen ("tribute.in", "r");
fout = fopen ("tribute.out", "w");
fscanf (fin, "%d%d%d", &n, &dx, &dy);
for (i = 1; i <= n; i++)
fscanf (fin, "%d%d", &a[i].x, &a[i].y);
sol = solv ();
for (i = 1; i <= n; i++)
a[i].x = a[i].y;
dx = dy;
sol += solv();
fprintf (fout, "%d", sol);
fclose (fin);
fclose (fout);
return 0;
}