Cod sursa(job #2434159)

Utilizator RobertLISARURobert Lisaru RobertLISARU Data 30 iunie 2019 20:16:56
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>

int sumLine(int **t, int n, int m, int line) {
	int sum = 0;
	for (int j = 0; j < m; j++) {
		sum += t[line][j];
	}
	return sum;
}

int sumColumn(int **t, int n, int m, int column) {
	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum += t[i][column];
	}
	return sum;
}

void flipLine(int **t, int n, int m, int line) {
	for (int j = 0; j < m; j++) {
		t[line][j] *= -1;
	}
}

void flipColumn(int **t, int n, int m, int column) {
	for (int i = 0; i < n; i++) {
		t[i][column] *= -1;
	}
}

int main() {
	std::ifstream fin("flip.in");
	std::ofstream fout("flip.out");
	int **t;
	int n, m;
	fin >> n;
	fin >> m;
	t = new int*[n];
	for (int i = 0; i < n; i++) {
		t[i] = new int[m];
		for (int j = 0; j < m; j++) {
			fin >> t[i][j];
		}
	}

	bool done = false;

	while (!done) {
		done = true;
		for (int i = 0; i < n; i++) {
			if (sumLine(t, n, m, i) < 0) {
				done = false;
				flipLine(t, n, m, i);
			}
		}
		for (int j = 0; j < m; j++) {
			if (sumColumn(t, n, m, j) < 0) {
				done = false;
				flipColumn(t, n, m, j);
			}
		}
	}

	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum += sumLine(t, n, m, i);
	}
	fout << sum;
	fout.flush();

	return 0;
}