Cod sursa(job #125255)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 20 ianuarie 2008 12:19:33
Problema Inundatii Scor 40
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 10-a Marime 1.07 kb
#include <cstdio>

#define fin  "inundatii.in"
#define fout "inundatii.out"

const int Nmax = 51000;

int N;
int x[Nmax],y[Nmax],z[Nmax];

long long ret;

void readdata()
{
	int i;

	freopen(fin,"r",stdin);

	scanf("%d",&N);

	for (i=1;i<=N;++i)
		scanf("%d%d%d",&x[i],&y[i],&z[i]);
}

int abs(int a)
{
	if ( a < 0 )
		a*=(-1);
	return a;
}

void solve()
{
	int i,j;
	int currx,curry,currz;
	long long sum;

	ret = -1;

	for (i=1;i<=N;++i)
	{
		currx=x[i];
		curry=y[i];
		currz=z[i];

		sum=0;

		for (j=i-1;j>0;--j)
		{
			--currx;
			--curry;
			--currz;
			
			sum = sum + (long long)abs(x[j]-currx);	
			sum = sum + (long long)abs(y[j]-curry);
			sum = sum + (long long)abs(z[j]-currz);
		}

		currx=x[i];
		curry=y[i];
		currz=z[i];

		for (j=i+1;j<=N;++j)	
		{
			++currx;
			++curry;
			++currz;
			
			sum = sum + (long long)abs(x[j]-currx);	
			sum = sum + (long long)abs(y[j]-curry);
			sum = sum + (long long)abs(z[j]-currz);
		}

		if ( sum < ret || ret == -1 )
			ret = sum;
	}

	freopen(fout,"w",stdout);

	printf("%lld\n",ret);
}

int main()
{
	readdata();
	solve();
	return 0;
}