Cod sursa(job #739971)

Utilizator veleanduAlex Velea veleandu Data 24 aprilie 2012 11:44:37
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
using namespace std;
#define maxn 50010
#define min(a,b) a<b?a:b
long rezst,rezdr,n,i,a,b,dx,dy;
long Nrst,Nrdr,Rst,Rdr,st,dr;
long X[maxn];
long Y[maxn];

int main()
{
	freopen("tribute.in","r",stdin);
	freopen("tribute.out","w",stdout);
	scanf ( "%d", &n);
	scanf ( "%d", &dx);
	scanf ( "%d", &dy);
	for ( i=1; i<=n; i++ )
	{
		scanf ("%d %d",&a,&b);
		X[a]++;
		Y[b]++;
	}
	// calculam pt x
	for ( dr=dx; dr<=50005; dr++ )
	{
		Rdr+=X[dr]*(dr-dx);
		Nrdr+=X[dr];
	}
	rezst=Rdr;
	for ( st=0,dr=dx; dr<=50005; st++,dr++ )
	{
		
		Nrst+=X[st];
		Rst+=Nrst;
		Nrdr-=X[dr];
		Rdr-=Nrdr;
		
		rezst=min ( rezst,Rdr+Rst );
	}		
	Rdr=0;
	Nrdr=0;
	Rst=0;
	Nrst=0;
	
	for ( dr=dy; dr<=50005; dr++ )
	{
		Rdr+=Y[dr]*(dr-dy);
		Nrdr+=Y[dr];
	}
	rezdr=Rdr;
	for ( st=0,dr=dy; dr<=50005; st++,dr++ )
	{
		Nrst+=Y[st];
		Rst+=Nrst;
		
		Nrdr-=Y[dr];
		Rdr-=Nrdr;
		rezdr=min ( rezdr,Rdr+Rst );
	}		
	printf ( "%d", rezst+rezdr );
	return 0;
}