Cod sursa(job #1727848)

Utilizator vladc096Vlad Cincean vladc096 Data 11 iulie 2016 19:17:45
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>

using namespace std;

short n, m;

inline void flipLine(int** a, int c) {
	for (int j = 0; j < m; j++) {
		a[c][j] *= -1;
	}
}

inline void flipColumn(int** a, int c) {
	for (int i = 0; i < n; i++) {
		a[i][c] *= -1;
	}
}

inline int sumOfLine(int** a, int c) {
	int ret = 0;
	for (int j = 0; j < m; j++) {
		ret += a[c][j];
	}
	return ret;
}

inline int sumOfColumn(int** a, int c) {
	int ret = 0;
	for (int i = 0; i < n; i++) {
		ret += a[i][c];
	}
	return ret;
}

inline int sum(int** a) {
	int ret = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			ret += a[i][j];
		}
	}
	return ret;
}

int main() {
	// input
	ifstream f("flip.in");
	f >> n >> m;
	int** a = new int*[n];
	for (int i = 0; i < n; i++) {
		a[i] = new int[m];
		for (int j = 0; j < m; j++) {
			f >> a[i][j];
		}
	}
	f.close();

	// solve
	bool flips = true;
	while (flips) {
		flips = false;
		// on lines
		for (int i = 0; i < n; i++) {
			if (sumOfLine(a, i) < 0) {
				flipLine(a, i);
				flips = true;
			}
		}
		// on columns
		for (int j = 0; j < m; j++) {
			if (sumOfColumn(a, j) < 0) {
				flipColumn(a, j);
				flips = true;
			}
		}
	}

	// output
	ofstream g("flip.out");
	g << sum(a) << "\n";
	g.close();

	// deallocate
	for (int i = 0; i < n; i++) {
		delete[] a[i];
	}
	delete[] a;

	return 0;
}