Cod sursa(job #125148)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 20 ianuarie 2008 11:41:51
Problema Inundatii Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 10-a Marime 0.71 kb
#include <stdio.h>

#define MAXN 50005
int N;
int X[MAXN], Y[MAXN], Z[MAXN];

inline int ABS( int x ) { return (x < 0) ? -x : x; }

inline long long solve( int x[] )
{
	long long MIN, S = 0;
	int curx = x[ N / 2 ] - (N / 2);
	for (int k = 0; k < N; k++)
		S += ABS( (curx + k) - x[k] );
	MIN = S;

	if (N % 2 == 0)
	{
		curx = x[ (N / 2) - 1 ] - (N / 2);
		S = 0;
		for (int k = 0; k < N; k++)
			S += ABS( (curx + k) - x[k] );
		if (S < MIN)
			MIN = S;
	}
	return MIN;
}

int main()
{
	freopen("inundatii.in", "rt", stdin);
	freopen("inundatii.out", "wt", stdout);

	scanf("%d", &N);
	for (int i = 0; i < N; i++)
		scanf("%d %d %d", X + i, Y + i, Z + i);

	printf("%lld\n", solve(X) + solve(Y) + solve(Z));

	return 0;
}