Cod sursa(job #1376551)

Utilizator valentin50517Vozian Valentin valentin50517 Data 5 martie 2015 17:48:59
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int A[68][18], Lin[18], Col[18], N, M, rs;
bool u = false;
bool PLinie(int i){
	if (Lin[i] <= 0){
		for (int j = 0; j < N; j++){
			A[i][j] = -A[i][j];
			Col[j] += 2 * A[i][j];
		}
		Lin[i] = -Lin[i];
	}
	else return true;
}
bool PColoana(int i){
	if (Col[i] <= 0){
		for (int j = 0; j < M; j++){
			A[j][i] = -A[j][i];
			Lin[j] += 2 * A[j][i];
		}
		Col[i] = -Col[i];
	}
	else return true;
}

void back(bool k){
	if (k){
		u = true;
		for (int i = 0; i < N; i++) if (!PColoana(i)) u = false;
		if (!u) back(false);
	}else{
		u = true;
		for (int j = 0; j<M; j++) if (!PLinie(j)) u = false;
		if (!u) back(true);
	}
}

int main(){
	fin >> M >> N;
	for (int i = 0; i<M; i++)
		for (int j = 0; j<N; j++){
			fin >> A[i][j];
			Lin[i] += A[i][j];
			Col[j] += A[i][j];
		}
	back(true);
	back(false);
	for (int i = 0; i<M; i++) rs += Lin[i];
	fout << rs;
	return 0;
}