Cod sursa(job #362962)

Utilizator dany123Florea Daniel dany123 Data 11 noiembrie 2009 13:41:20
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");

int n,m,a[20][20],slin[20],scol[20],min_l=1,min_l2,min_c=1,min_c2;

int s_l (int n) {	//n = nr linie	//suma_linie
	int s=0;
	for (int i=0;i<m;i++) s+=a[n][i];
	return s;}

int s_c (int m) {	//m = nr coloana	//suma_coloana
	int s=0;
	for (int i=0;i<n;i++) s+=a[i][m];
	return s;}

void l_inv (int n) {for (int j=0;j<m;j++) a[n][j]*=-1;}
void c_inv (int m) {for (int i=0;i<n;i++) a[i][m]*=-1;}

int main () {
	int i,j,s=0;
	fin>>n>>m;		
	for (i=0;i<n;i++) for (j=0;j<m;j++)	fin>>a[i][j];		//citesc matricea
	
	do 
	{
		for (i=0;i<n;i++) slin[i]=s_l(i);		//slin = suma liniei i
		for (j=0;j<m;j++) scol[j]=s_c(j);	
		
		for (i=0;i<n;i++) if (slin[i]<min_l) {min_l=slin[i]; min_l2=i;}
		for (j=0;j<m;j++) if (scol[j]<min_c) {min_c=scol[j]; min_c2=j;}
		//daca min = 0 (to think)
		if (min_l<min_c) l_inv(min_l2);
			else if (min_c<min_l) c_inv(min_c2);
				else /* if (min_c==min_l) */ l_inv(min_l2);
					
	} while (min_l>=0 && min_c>=0);
	
	for (i=0;i<n;i++) for (j=0;j<m;j++) s+=a[i][j];		//suma matricei finale;
	fout<<s;
	fin.close(); fout.close();
	return 0;
}