Cod sursa(job #147963)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 3 martie 2008 19:22:43
Problema Inundatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
long x[50000],y[50000],z[50000],n;
long long sigma,sx=0,sy=0,sz=0;
long long  rez(long a[],long long s)
{  	long st,dr,m,i;long long aux,d,auxd;
	st=1;dr=n;
	while (st<dr)
	{       m=(st+dr)/2;
		if (s==a[m])
			st=dr;
		else
			if (s<a[m]) st=m+1;
			else dr=m-1;
	}
	d=a[dr]-s;
	if (d<0) d*=(-1);
	a[dr]=s;
	for (i=dr-1;i>=1;i--) { aux=a[i+1]-1;
				auxd=a[i]-aux;
				if (auxd<0) auxd*=(-1);
				a[i]=a[i+1]-1;
				d+=auxd; }
	for (i=dr+1;i<=n;i++) { aux=a[i-1]+1;
				auxd=aux-a[i];
				if (auxd<0) auxd*=(-1);
				a[i]=a[i-1]+1;
				d+=auxd; }
	return d;
}
int main()
{  	long i;
	FILE *f=fopen("inundatii.in","r");
	fscanf(f,"%ld",&n);
	for (i=1;i<=n;i++)
	      {	fscanf(f,"%ld%ld%ld",&x[i],&y[i],&z[i]);
		sx+=x[i];sy+=y[i];sz+=z[i]; }
	fclose(f);
	sx=sx/n;
	sy=sy/n;
	sz=sz/n;
	sigma=rez(x,sx)+rez(y,sy)+rez(z,sz);
	FILE *g=fopen("inundatii.out","w");
	fprintf(g,"%lld\n",sigma);
	fclose(g);
	return 0;
}