Cod sursa(job #1024065)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 8 noiembrie 2013 08:57:49
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#include<climits>
int a,b,n,l,c,i,j,k,x[50001],y[50001],xs[50001],xd[50002],ys[50001],yd[50001],minx,miny;
FILE *f,*g;
int main(){
	f=fopen("tribute.in","r");
	g=fopen("tribute.out","w");
	fscanf(f,"%d%d%d",&n,&l,&c);
	for(i=1;i<=n;i++){
		fscanf(f,"%d%d",&a,&b);
		x[a]++;
		y[b]++;	
	}
	minx=miny=INT_MAX;
	xs[0]=0;
	k=x[0];
	for(i=1;i<=50000;i++){
		xs[i]=xs[i-1]+k;
		k+=x[i];
	}
	k=x[50000];
	xd[50000]=0;
	for(i=49999;i>=0;i--){
		xd[i]=xd[i+1]+k;
		k+=x[i];
	}
	for(i=0;i<=50000-l;i++){
		if(xs[i]+xd[i+l]<minx)
			minx=xs[i]+xd[i+l];
	}
	ys[0]=0;
	k=y[0];
	for(i=1;i<=50000;i++){
		ys[i]=ys[i-1]+k;
		k+=y[i];
	}
	k=y[50000];
	yd[50000]=0;
	for(i=49999;i>=0;i--){
		yd[i]=yd[i+1]+k;
		k+=y[i];
	}
	for(i=0;i<=50000-c;i++){
		if(ys[i]+yd[i+c]<miny)
			miny=ys[i]+yd[i+c];
	}
	fprintf(g,"%d",minx+miny);
	fclose(f);
	fclose(g);
	return 0;
}