Pagini recente » Cod sursa (job #901358) | Cod sursa (job #321600) | Cod sursa (job #901677) | Cod sursa (job #321299) | Cod sursa (job #971989)
Cod sursa(job #971989)
#include <cstdio>
#include <utility>
#include <algorithm>
typedef std::pair<int,int> Point;
const int MAX_N(50001);
const int MAX_SIZE(50011);
int n, Dx, Dy;
Point v [MAX_N];
int Dpx [2] [MAX_SIZE];
int Dpy [2] [MAX_SIZE];
int Optimal;
inline void Read (void)
{
std::freopen("tribute.in","r",stdin);
std::scanf("%d %d %d",&n,&Dx,&Dy);
for (int i(1) ; i <= n ; ++i)
{
std::scanf("%d %d",&v[i].first,&v[i].second);
++v[i].first;
++v[i].second;
}
std::fclose(stdin);
}
inline void Print (void)
{
std::freopen("tribute.out","w",stdout);
std::printf("%d\n",Optimal);
std::fclose(stdout);
}
inline void Dynamic (void)
{
int i, a, b;
for (i = 1 ; i <= n ; ++i)
{
++Dpx[0][v[i].first];
++Dpx[1][v[i].first];
++Dpy[0][v[i].second];
++Dpy[1][v[i].second];
}
a = b = 0;
for (i = 1 ; i < MAX_SIZE ; ++i)
{
a += Dpx[0][i];
b += Dpy[0][i];
Dpx[0][i] = Dpx[0][i - 1] + a;
Dpy[0][i] = Dpy[0][i - 1] + b;
}
a = b = 0;
for (i = MAX_SIZE - 2 ; i ; --i)
{
a += Dpx[1][i];
b += Dpy[1][i];
Dpx[1][i] = Dpx[1][i + 1] + a;
Dpy[1][i] = Dpy[1][i + 1] + b;
}
int sol(1 << 30);
for (i = 1 ; i < MAX_SIZE - Dx ; ++i)
sol = std::min(sol,Dpx[0][i - 1] + Dpx[1][i + Dx + 1]);
Optimal += sol;
sol = 1 << 30;
for (i = 1 ; i < MAX_SIZE - Dy ; ++i)
sol = std::min(sol,Dpy[0][i - 1] + Dpy[1][i + Dy + 1]);
Optimal += sol;
}
int main (void)
{
Read();
Dynamic();
Print();
return 0;
}