Cod sursa(job #147941)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 3 martie 2008 19:02:08
Problema Inundatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<math.h>
long  x[50000],y[50000],z[50000],n;
long long sigma,sx,sy,sz;
int rez(long a[],long long s)
{  	long st,dr,m,i;long long d,aux;
	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=abs(a[dr]-s);
	a[dr]=s;
	for (i=dr-1;i>=1;i--) { aux=a[i+1]-1;d+=abs(a[i]-aux);a[i]=a[i+1]-1; }
	for (i=dr+1;i<=n;i++) { aux=a[i-1]+1;d+=abs(aux-a[i]);a[i]=a[i-1]+1; }
	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/=n;sy/=n;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;
}