Cod sursa(job #622038)

Utilizator ArtyPaulpsadkpako ArtyPaul Data 17 octombrie 2011 11:13:40
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb

#include<fstream>
using namespace std;
int v[17][17],n,m,x[17],y[17],a[17][17];
void citire(){
	ifstream fin("flip.in");
	fin>>n>>m;
	int i,j;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++)
			fin>>v[i][j];
	}
	fin.close();
}
void sum(){
	int i,j;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			x[i]+=v[i][j];
			y[j]+=v[i][j];
		}
	}
}
void copy(){
	int i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			a[i][j]=v[i][j];
}
void bc(){
	int i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			v[i][j]=a[i][j];
}
void comc(int k){
	int i;
	for(i=1;i<=n;i++){
		v[i][k]=-v[i][k];
	}
	y[k]=-y[k];
	for(i=1;i<=n;i++)
		x[i]=x[i]+2*v[i][k];
}
void coml(int k){
	int i;
	for(i=1;i<=m;i++){
		v[k][i]=-v[k][i];
	}
	x[k]=-x[k];
	for(i=1;i<=n;i++){
		y[i]+=2*v[k][i];
	}
}
int main(){
	citire();
	sum();
	copy();
	int i,j;
	int s1=0;
	int ok=1;
	do{
		ok=1;
		for(i=1;i<=n;i++){
			if(x[i]<0){ coml(i);
			ok=0;
			}
		}}
		while(ok==0);
	
	do{
		ok=1;
		for(i=1;i<=m;i++){
			if(y[i]<0){ comc(i);
			ok=1;
			}
		}
	}
	while(ok==0);
	int s=0;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			s+=v[i][j];
		}
	}
	bc();
	sum();
	do{
		ok=1;
		for(i=1;i<=m;i++){
			if(y[i]<0){ comc(i);
			ok=1;
			}
		}
	}
	while(ok==0);
	do{
		ok=1;
		for(i=1;i<=n;i++){
			if(x[i]<0){ coml(i);
			ok=0;
			}
		}
	}
	while(ok==0);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			s1+=v[i][j];
		}
	}
	ofstream fout("flip.out");
	if(s1>s) fout<<s1;
	else
	fout<<s;
	fout.close();
	return 0;
}