Cod sursa(job #125386)

Utilizator victorsbVictor Rusu victorsb Data 20 ianuarie 2008 12:45:11
Problema Inundatii Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 0.96 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

#define Nmax 50015
#define INF 0x3f3f3f3f
#define ll long long

int n;
ll sir[4][Nmax];
ll sum1[Nmax], sum2[Nmax];
ll sol;

void citire()
{
	int i;

	scanf("%d\n", &n);
	for (i = 1; i <= n; ++i)
		scanf("%lld %lld %lld\n", &sir[1][i], &sir[2][i], &sir[3][i]);
}

void solve()
{
	int i, j;
	ll sum;

	for (i = 1; i <= 3; ++i)
	{
		sum = INF;
		sum *= INF;

		memset(sum1, 0, sizeof(sum1));
		for (j = 2; j <= n; ++j)
			sum1[j] = sum1[j - 1] + (j - 1) * (sir[i][j - 1] - sir[i][j]);
		memset(sum2, 0, sizeof(sum2));
		for (j = n - 1; j >= 1; --j)
			sum2[j] = sum2[j + 1] + (n - j) * (sir[i][j] - sir[i][j + 1]);

		for (j = 1; j <= n; ++j)
			sum = min(sum, sum1[j] + sum2[j] + (j - 1) * j / 2 + (n - j) * (n - j + 1) / 2);

		sol += sum;
	}

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

int main()
{
	freopen("inundatii.in", "r", stdin);
	freopen("inundatii.out", "w", stdout);

	citire();
	solve();
	
	return 0;
}