Cod sursa(job #672307)

Utilizator cioboata.iCioboata Ioan Liviu cioboata.i Data 1 februarie 2012 20:48:36
Problema Tribute Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>

struct stoica{
	long long x,y;
};

stoica coord[50001];
long long fx[50001],fy[50001],sx[50001],sy[50001],spartx[50001],sparty[50001];

int main()
{
	freopen("tribute.in","r",stdin);
	freopen("tribute.out","w",stdout);
	long long min=50000000000,n,dx,dy,i,s=0;
	scanf("%lld%lld%lld",&n,&dx,&dy);
	for(i=1;i<=n;i++)
	{
		scanf("%lld%lld",&coord[i].x,&coord[i].y);
		fx[coord[i].x]++;
		fy[coord[i].y]++;
		if(coord[i].x>dx)
			sx[0]+=coord[i].x-dx;
		if(coord[i].y>dy)
			sy[0]+=coord[i].y-dy;
	}
	for(i=1;i<=50000;i++)
	{
		spartx[i]=spartx[i-1]+fx[i-1];
		sparty[i]=sparty[i-1]+fy[i-1];
	}
	for(i=1;i<=50000-dx;i++)
	{
		//fx[0]+=fx[i-1];
		sx[i]=sx[i-1]+spartx[i];
		sx[i]-=n-spartx[i+dx];
	}
	for(i=1;i<=50000;i++)
		if(sx[i]>0 && sx[i]<min)
			min=sx[i];
	s+=min;
	for(i=1;i<=50000-dy;i++)
	{
		//fy[0]+=fy[i-1];
		sy[i]=sy[i-1]+sparty[i];
		sy[i]-=n-sparty[i+dy];
	}
	min=50000000000;
	for(i=1;i<=50000;i++)
		if(sy[i]>0 && sy[i]<min)
			min=sy[i];
	s+=min;
	printf("%lld",s);
	return 0;
}