Cod sursa(job #798788)

Utilizator DoomburgerCojocaru Andrei Doomburger Data 17 octombrie 2012 11:54:36
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
using namespace std;

int tabla[16][16];

bool checkSums(int line, int column, int lineSize, int columnSize, bool checkColumn) // Verifica daca suma numerelor negative de pe o linie sau coloana este mai mare ca suma celor pozitive
{
	int i, sumPositive = 0, sumNegative = 0;
	
	if (!checkColumn)
	{
		int temp[lineSize];
		
		for (i = 0; i < lineSize; i++)
			temp[i] = tabla[line][i];
		
		for (i = 0; i < lineSize; i++)
		{
			if (temp[i] > 0)
			{
				sumPositive += temp[i];
			}
			
			else
			{
				temp[i] *= -1;
				sumNegative += temp[i];
			}
		}
	}
	
	else
	{
		int temp[columnSize];
		
		for (i = 0; i < columnSize; i++)
			temp[i] = tabla[i][column];
		
		for (i = 0; i < columnSize; i++)
		{
			if (temp[i] > 0)
			{
				sumPositive += temp[i];
			}
			
			else
			{
				temp[i] *= -1;
				sumNegative += temp[i];
			}
		}
	}
	
	if (sumPositive > sumNegative)
		return false;
	
	else
		return true;
}

void flip(int line, int column, int lineSize, int columnSize, bool isColumn) // Inmulteste o coloana sau linie cu -1
{
	int i;
	
	if (isColumn)
	{
		for (i = 0; i < columnSize; i++)
		{
			tabla[i][column] *= -1;
		}
	}
	
	else
	{
		for (i = 0; i < columnSize; i++)
		{
			tabla[line][i] *= -1;
		}
	}
}


int main()
{
	int i, y, N, M, sum = 0;
	
	ifstream f("flip.in");
	ofstream g("flip.out");
	
	f>>N>>M;
	

	for (i = 0; i < N; i++)
	{
		for (y = 0; y < M; y++)
		{
			f>>tabla[i][y];
		}
	}
	
	f.close();
	
	for (i = 0; i < N; i++)
		if (checkSums(i, 0, M, N, false))
			flip(i, 0, M, N, false);
	
	for (i = 0; i < M; i++)
	{
		if (checkSums(0, i, M, N, true))
			flip(0, i, M, N, true);
		
	}
	
	
	for (i = 0; i < N; i++)
	{
		for (y = 0; y < M; y++)
		{
			sum += tabla[i][y];
		}
	}
	
	g<<sum;
	
	g.close();
}