Cod sursa(job #363080)

Utilizator dany123Florea Daniel dany123 Data 11 noiembrie 2009 19:33:56
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<iostream>
#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=0, min_c=-1, min_c2=0;

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;}

//void afisare () {for (int i=0;i<n;i++) {for (int j=0;j<m;j++) cout<<a[i][j]<<' '; cout<<'\n';} cout<<endl;} //afisare

int negativ () {for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (a[i][j]<0) return 1; return 0;}

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
	//afisare();
	int r=0;
	while (r<=256 && (min_l<=0 || min_c<=0) /*&& min_l==0?negativ():1*/) {
		min_l=0; min_c=0;
		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); //cout<<"\n min_c2= "<<min_c2<<endl<<endl; //
				else  if (min_c==min_l)  l_inv(min_l2); 
		//c_inv(min_c2);
		//l_inv(min_l2);
		//afisare();
		r++;
	}
	
	for (i=0;i<n;i++) for (j=0;j<m;j++) s+=a[i][j];		//suma matricei finale;
	cout<<s;
	fout<<s;
	//afisare();
	fin.close(); fout.close();
	return 0;
}