Cod sursa(job #1068227)

Utilizator MarianMMorosac George Marian MarianM Data 28 decembrie 2013 02:16:11
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
using namespace std;

ifstream fin("flip.in");
ofstream fout("flip.out");

int n, m, i, j, a[17][17], sum_max, sum;

void citire();
void clear_a();
void com_col();
void com_lin();
int  sum_lin_col();

int main()
{
	citire();
	sum_max = sum_lin_col();
	sum = sum_lin_col();
	while (sum > sum_max){
		sum_max = sum;
		sum = sum_lin_col();
	}
	fout << sum_max; 
	return 0;
}

void citire()
{
	fin >> n >> m;
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= m; j++)
		{
			fin >> a[i][j];
		}
	}
}

int sum_lin_col()
{
	int s=0;
	clear_a();

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= m; j++)
		{
			a[0][j] += a[i][j];
			a[i][0] += a[i][j];
		}
	}

	com_col();
	com_lin();

	clear_a();
	
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= m; j++)
		{
			a[0][j] += a[i][j];
			a[i][0] += a[i][j];
		}
	}

	for (i = 1; i <= n; i++)	s += a[i][0];

	return s;
}

void com_col()
{
	for (j = 1; j <= m; j++)
	{
		if (a[0][j] < 0)
		{
			for (i = 1; i <= n; i++)
				a[i][j] *= -1;
			a[0][j] *= -1;
		}
	}
}

void com_lin()
{
	for (i = 1; i <= m; i++)
	{
		if (a[i][0] < 0)
		{
			for (j = 1; j <= n; j++)
				a[i][j] *= -1;
			a[i][0] *= -1;
		}
	}
}

void clear_a()
{
	for (i = 1; i <= n; i++){
		a[i][0] = 0;
	}

	for (i = 1; i <= m; i++){
		a[0][i] = 0;
	}
}