Cod sursa(job #124883)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 20 ianuarie 2008 09:45:47
Problema Inundatii Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 0.66 kb
#include <stdio.h>

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

inline long long solve( int x[] )
{
	long long MIN, S = 0;
	int curx = x[0] + 1, left = N, right = 0;
	for (int k = 0; k < N; k++)
		S += curx + (N - k - 1) - x[k];
	MIN = S;

	for (curx--; curx >= x[N - 1] - 1; curx--)
	{
		S -= left;
		S += right;
		if (S < MIN)
			MIN = S;

		if (curx + right == x[right])
			left--, right++;
	}
	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;
}