Pagini recente » Cod sursa (job #1991496) | Cod sursa (job #366829) | Cod sursa (job #2084585) | Cod sursa (job #92318) | Cod sursa (job #89028)
Cod sursa(job #89028)
#include <cstdio>
#define DMAX 50001
int N,DX,DY;
int cntX[DMAX],cntY[DMAX];
int left[DMAX],right[DMAX],up[DMAX],down[DMAX];
void read_data()
{
int x,y;
scanf("%d %d %d",&N,&DX,&DY);
for(int i=0; i<N; i++)
{
scanf("%d %d",&x,&y);
cntX[x]++;
cntY[y]++;
}
}
void init()
{
int i;
left[0]=0;
for(i=1; i<DMAX; i++)
left[i]=left[i-1]+cntX[i-1];
right[DMAX-1]=0;
for(i=DMAX-2; i>=0; i--)
right[i]=right[i+1]+cntX[i+1];
down[0]=0;
for(i=1; i<DMAX; i++)
down[i]=down[i-1]+cntY[i-1];
up[DMAX-1]=0;
for(i=DMAX-2; i>=0; i--)
up[i]=up[i+1]+cntY[i+1];
}
int hcost() // horizontal min-cost
{
int i, cost=0, mincost;
for(i=DX; i<DMAX; i++)
cost+=right[i];
mincost=cost;
for(i=1; i<=DMAX-DX; i++)
{
cost += left[i];
cost -= right[i+DX-1];
if(mincost>cost)
mincost=cost;
}
return mincost;
}
int vcost() // vertical min-cost
{
int i, cost=0, mincost;
for(i=DY; i<DMAX; i++)
cost+=up[i];
mincost=cost;
for(i=1; i<=DMAX-DY; i++)
{
cost += down[i];
cost -= up[i+DY-1];
if(mincost>cost)
mincost=cost;
}
return mincost;
}
int main()
{
freopen("tribute.in","r",stdin);
freopen("tribute.out","w",stdout);
read_data();
init();
printf("%d\n",hcost()+vcost());
return 0;
}