Cod sursa(job #250289)

Utilizator alexeiIacob Radu alexei Data 30 ianuarie 2009 15:24:19
Problema Inundatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#define NMAX 50002

int N;
long long ANS;
int A[4][NMAX];

void reading()
{
	scanf("%d",&N);

	int i;
	for(i=1; i<=N; ++i)
		scanf("%d%d%d",&A[0][i],&A[1][i],&A[2][i]);
}

inline long long abs(const long long a)
{
	if( a>0 )
		return a;
	return -a;
}

inline long long min(const long long a,const long long b)
{
	return a<b?a:b;
}

long long solve_m1(const int val)
{
	int M1= A[val][ N>>1 ] - (N>>1);
	int i;
	long long sol;
	for(i=1; i<=N; ++i)
		sol+=abs((long long) A[val][i]-M1-i);
	return sol;
}

long long solve_m2(const int val)
{
	int M2= A[val][ (N>>1)+1 ] - (N>>1)-1;
	int i;
	long long sol;
	for(i=1; i<=N; ++i)
		sol+=abs((long long) A[val][i]-M2-i);
	return sol;
}

void solve_for(const int val)
{
	if( N%2==0 )
		ANS+=solve_m1(val);
	else
		ANS+=min( solve_m1(val) , solve_m2(val) );
}

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

	solve_for(0);
	solve_for(1);
	solve_for(2);

	printf("%lld\n",ANS);

	return 0;
}