Pagini recente » Cod sursa (job #1769607) | Cod sursa (job #2741942) | Cod sursa (job #1557694) | Cod sursa (job #2836947) | Cod sursa (job #1470310)
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <map>
long long cit() {
long long ans = 0;
char c = getchar();
bool neg = false;
while (c < '0' || c > '9') {
if (c == '-') {
c = getchar();
neg = true;
break;
}
c = getchar();
}
while (c >= '0' && c <= '9') {
ans = (ans << 3) + (ans << 1) + (c - '0');
c = getchar();
}
return (neg) ? -ans : ans;
}
void afis(long long n, char d) {
int l = 0;
char c[20];
if (n == 0) {
putchar('0');
}
if (n < 0) {
putchar('-');
n = -n;
}
while (n > 0) {
c[l++] = n % 10 + '0';
n /= 10;
}
for (int i = l - 1; i >= 0; i--) {
putchar(c[i]);
}
putchar(d);
}
using namespace std;
long long f(map<long long, long long> m, long long k) {
long long ans = LLONG_MAX;
map<long long, long long>::iterator it = m.begin();
long long st = 0, dr = it->second;
long long ls = 0, ld = 0;
for (it++; it != m.end(); it++) {
dr += it->second;
ld += it->second * (it->first - m.begin()->first);
}
for (it = m.begin(); ; ) {
dr -= it->second;
long long aux = ls + ld - k * ((st > dr) ? st : dr);
if (aux < ans)
ans = aux;
st += it->second;
int cc = it->first;
it++;
if (it == m.end())
break;
ls += st * (it->first - cc);
ld -= dr * (it->first - cc);
}
return ans;
}
int main() {
freopen("tribute.in", "r", stdin);
freopen("tribute.out", "w", stdout);
long long n = cit(), dx = cit(), dy = cit();
map<long long, long long> lx, ly;
for (int i = 1; i <= n; i++) {
long long x = cit(), y = cit();
lx[x]++;
ly[y]++;
}
long long px = f(lx, dx);
long long py = f(ly, dy);
printf("%lld", px + py);
return 0;
}