Cod sursa(job #934579)

Utilizator PsychoRoAlex Buicescu PsychoRo Data 30 martie 2013 19:58:49
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>

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

//std::ifstream fin("date.in");
//std::ofstream fout("date.out");

long cmmdc(long a, long b)
{
	if(!b)
	{
		return a;
	}
	else
	{
		return cmmdc(b, a%b);
	}
}

void citeste()
{
	int n = 0, m = 0;
	fin>>n>>m;
	long a[16][16], sumeR[16], sumeC[16];

	for(int i = 0 ; i < n ; i++)
	{
		for(int j = 0 ; j < m ; j++)
		{
			fin>>a[i][j];

			if(!i)
			{
				sumeC[j] = a[i][j];
			}
			else
			{
				sumeC[j] += a[i][j];
			}

			if(!j)
			{
				sumeR[i] = a[i][j];
			}
			else
			{
				sumeR[i] += a[i][j];
			}
		}
	}

	long sumTot = 0, maxim = 0;
	bool noNegL = false, noNegC = false;

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

	while(!noNegL || !noNegC)
	{
		sumTot = 0;
		noNegL = true, noNegC = true;

		for(int i = 0; i < n; i++)
		{
			if(sumeR[i] < 0)
			{
				for(int k = 0 ; k < m ; k++)
				{
					a[i][k] *= (-1);
					sumeC[k] += a[i][k] * 2;

					if(sumeC[k] < 0)
					{
						noNegC = false;
					}
				}
			}
		}


		for(int i = 0; i < m; i++)
		{
			if(sumeC[i] < 0)
			{
				for(int k = 0 ; k < n ; k++)
				{
					a[k][i] *= (-1);
					sumeR[k] += a[k][i] * 2;

					if(sumeR[k] < 0)
					{
						noNegL = false;
					}
				}
			}
		}

		for(int i = 0 ; i < n ; i++)
		{
			for(int j = 0 ; j < m ; j++)
			{
				sumTot += a[i][j];
			}
		}
		if(sumTot <= maxim)
		{
			break;
		}
		else
		{
			maxim = sumTot;
		}
	}
//		for(int i = 0 ; i < n ; i++)
//		{
//			for(int j = 0 ; j < m ; j++)
//			{
//				sumTot += a[i][j];
//			}
//		}

		fout<<sumTot;

}

int main()
{
	citeste();
	return 0;
}