Cod sursa(job #125453)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 20 ianuarie 2008 12:55:46
Problema Inundatii Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 0.9 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,st[Nmax],dr[Nmax];

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;

	st[0]=0;

	for (i=2;i<=N;++i)
		st[i] = st[i-1] + (i-1) * ( abs(x[i]-x[i-1]) + abs(y[i]-y[i-1]) + abs(z[i]-z[i-1]) + 3 );
	for (i=N-1;i>0;--i)
		dr[i] = dr[i+1] + (N-i) * ( abs(x[i]-x[i+1]) + abs(y[i]-y[i+1]) + abs(z[i]-z[i+1]) + 3 );

	for (i=1;i<=N;++i)
		if ( st[i] + dr[i] < ret || ret == -1 )
			ret = st[i] + dr[i];

	freopen(fout,"w",stdout);

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

int main()
{
//	printf("%d\n",(2*sizeof(st) + 3*sizeof(x))/1024);
	readdata();
	solve();
	return 0;
}