Cod sursa(job #1702970)

Utilizator megawattMegaWatt megawatt Data 15 mai 2016 20:53:24
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>

using namespace std;

// Build command:
// g++ -std=c++98 -Wall -o flip flip.cpp

int main(int argc, char const *argv[])
{
	int n,			// numarul de linii
		m,			// numarul de coloane
		**M,		// tabla dreptunghiulara
		suma = 0;	// suma totala

	// deschiderea fluxurilor
	ifstream input("flip.in");
	ofstream output("flip.out");

	// citirea dimensiunilor
	input >> n;
	input >> m;

	// alocarea tablei
	M = new int*[n];
	for(int i = 0; i < n; i++)
		M[i] = new int[m];

	// citirea tablei
	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			input >> M[i][j];

	// intai facem flip-uri pe linii
	for(int i = 0; i < n; i++)
	{
		int pos_sum = 0,
			neg_sum = 0;

		for(int j = 0; j < m; j++)
			if (M[i][j] > 0)
				pos_sum += M[i][j];
			else
				neg_sum -= M[i][j];

		if (neg_sum > pos_sum) // flip it
			for(int j = 0; j < m; j++)
				M[i][j] = -M[i][j];
	}

	// apoi facem flip-uri pe coloane
	for(int j = 0; j < m; j++)
	{
		int pos_sum = 0,
			neg_sum = 0;

		for(int i = 0; i < n; i++)
			if (M[i][j] > 0)
				pos_sum += M[i][j];
			else
				neg_sum -= M[i][j];

		if (neg_sum > pos_sum) // flip it
			for(int i = 0; i < n; i++)
				M[i][j] = -M[i][j];
	}

	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			suma += M[i][j];

	// scriere in fisierul de iesire rezultatul final
	output << suma;

	// dealocarea tablei
	for(int i = 0; i < n; i++)
		delete[] M[i];
	delete[] M;

	// inchiderea fluxurilor
	input.close();
	output.close();

	return 0;
}