Cod sursa(job #787033)

Utilizator icb_mnStf Cic icb_mn Data 12 septembrie 2012 15:21:30
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#include<math.h>

using namespace std;

ifstream f("filip.in");
ofstream g("filip.out");

#define NMAX 16

int n,m,s = 0,x[NMAX][NMAX] = {0};

void citire()
{
	f>>n>>m;
	
	for(int i = 0; i < n ; ++i)
		for(int j = 0; j < m; ++j)
			f>>x[i][j];
		
}

inline void schimbalin(int k)
{
	for(int i = 0; i < m; ++i)
	{
		if(x[k][i] <= 0)
			x[k][i] = (x[k][i] - x[k][i]) + abs(x[k][i]);
		else
			x[k][i] = x[k][i] - x[k][i] - x[k][i];
	}
}

inline void schimbacol(int k)
{
	for(int i = 0; i < n; ++i)
	{
		if(x[i][k] <= 0)
			x[i][k] = (x[i][k] - x[i][k]) + abs(x[i][k]);
		else
			x[i][k] = x[i][k] - x[i][k] - x[i][k];
	}
}

inline void filip()
{
	for(int i = 0; i < n; ++i)
	{
		int s1 = 0,s2 = 0;
		
		for(int j = 0; j < m; ++j)
		{
			if(x[i][j] >= 0)
				s1 += x[i][j];
			else
				s2 += abs(x[i][j]);
		}
		
		if(s2 > s1)
			schimbalin(i);
	}
	
	for(int i = 0; i < m ;++i)
	{
		int s1 = 0,s2 = 0,j = 0;
		
		for(j = 0; j < n; ++j)
		{
			if(x[j][i] >= 0)
				s1 += x[j][i];
			else
				s2 += abs(x[j][i]);
		}
		
		if(s2 > s1)
			schimbacol(i);
	}
}

void scrie()
{
	for(int i = 0; i < n; ++i)
		for(int j = 0; j < m; ++j)
			s += x[i][j];

	g<<s<<'\n';
}

int main()
{
	citire();
	
	filip();
	
	scrie();
	
	g.close();
	
	return 0;
}