Cod sursa(job #462910)

Utilizator cont_de_testeCont Teste cont_de_teste Data 14 iunie 2010 10:57:38
Problema Inundatii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;

const int Nmax = 50005;

int N;
int X[Nmax], Y[Nmax], Z[Nmax];
long long ret;

void ReadData() {
	freopen("inundatii.in", "r", stdin);
	freopen("inundatii.out", "w", stdout);

	scanf("%d", &N);
	assert(1 <= N && N <= 50000);
	for (int i = 0; i < N; ++i) {
		assert(scanf("%d %d %d", X+i, Y+i, Z+i) == 3);
		assert(0 <= X[i] && X[i] <= 100000000);
		assert(0 <= Y[i] && Y[i] <= 100000000);
		assert(0 <= Z[i] && Z[i] <= 100000000);
		if (i) {
			assert(X[i] < X[i-1]);
			assert(Y[i] < Y[i-1]);
			assert(Z[i] < Z[i-1]);
		}
	}
}

void Solve(int A[]) {
	int mij = N/2;
	for (int i = 0; i < N; ++i)
		ret += (long long)(i > mij ? A[mij] - A[i] + i-mij : A[i] - A[mij] + mij-i);
}

int main() {
	ReadData();
	Solve(X);
	Solve(Y);
	Solve(Z);
	//sort(X, X+N);
	//sort(Y, Y+N);
	//sort(Z, Z+N);
	printf("%lld\n", ret);
}