Cod sursa(job #804673)

Utilizator rebegeaRebegea Razvan rebegea Data 30 octombrie 2012 01:24:25
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
//http://infoarena.ro/problema/flip
#include <fstream>
#include <cstdio>
//#include <time.h>

int i,j,l,c,v[16][16],rez = -256000000, NotFlipped = 0;
void doSumL(int);
void doSumC(int);
int main()
{
	//clock_t startTime = clock();

	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d",&l);
	scanf("%d",&c);
	for (i=0;i<l;i++)
		for (j = 0 ;j<c;j++)
			scanf("%d",&v[i][j]);
	//
	doSumL(rez);

    //
	/*clock_t endTime = clock();
	clock_t clockTicksTaken = endTime - startTime;
	double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;*/

	printf("%d",rez);
	return 0;
}
//int switchSignOnLine(int v[16][16],int linie)
//{
//	int sumPoz =0 , sumNeg = 0;
//	for(i=0;i<c;i++)
//		if(v[linie][i] > 0 )
//			sumPoz += v[linie][i];
//		else
//			sumNeg += v[linie][i];
//	/*if( sumPoz > sumNeg)
//		return 1;
//	else if ( sumPoz < sumNeg )
//		return -1;
//	else return 0;*/
//	return sumPoz + sumNeg;
//}
//int switchSignOnColumn(int v[16][16],int coloana)
//{
//	int sumPoz =0 , sumNeg = 0;
//	for(i=0;i<l;i++)
//		if(v[i][coloana] > 0 )
//			sumPoz += v[i][coloana];
//		else
//			sumNeg += v[i][coloana];
//	/*if( sumPoz > sumNeg)
//		return 1;
//	else if ( sumPoz < sumNeg )
//		return -1;
//	else return 0;*/
//	return sumPoz + sumNeg;
//}

void doSumL(int sumMax)
{
	int sumMaxLocal = 0;
	for(i = 0 ; i < l; i++ )
	{
		int suma = 0;
		for ( j = 0; j < c; j++)
			suma += v[i][j];
		if (suma <= 0) 
		{
			suma = -suma;
			for ( j = 0; j < c; j++)
			v[i][j] = -v[i][j];
		}

		sumMaxLocal += suma;
	}
	if(sumMaxLocal >= sumMax)
	{
		if(sumMaxLocal == sumMax) NotFlipped ++;
		if(NotFlipped < 3)
		doSumC(rez = sumMaxLocal);
	}
}
void doSumC(int sumMax)
{
	int sumMaxLocal = 0;
	for(i = 0 ; i < c; i++ )
	{
		int suma = 0;
		for ( j = 0; j < l; j++)
			suma += v[j][i];
		if (suma <= 0) 
		{
			suma = -suma;
			for ( j = 0; j < l; j++)
			v[j][i] = -v[j][i];
		}

		sumMaxLocal += suma;
	}
	if(sumMaxLocal >= sumMax)
	{
		if(sumMaxLocal == sumMax) NotFlipped ++;
		if(NotFlipped < 3)
		doSumL(rez = sumMaxLocal);
	}
}