Cod sursa(job #454318)

Utilizator DD1994Mincu Dragos DD1994 Data 11 mai 2010 21:49:08
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
//Gigel a descoperit un nou joc pe care l-a numit "Flip". Acesta se joaca pe o tabla dreptunghiulara de dimensiuni N*M care 
//contine numere intregi. Fiecare linie si fiecare coloana are un comutator care schimba starea tuturor elementelor de pe 
//acea linie sau coloana, inmultindu-le cu -1. Scopul jocului este ca pentru o configuratie data a tablei de joc sa se 
//actioneze asupra liniilor si coloanelor astfel incat sa se obtina o tabla cu suma elementelor cat mai mare.
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
  	FILE *f=fopen("flip.in","rt");
	FILE *g=fopen("flip.out","wt");
	long int x[17][17]={0},i,j,n,m,efectuat;
	long int suma;
	fscanf (f,"%ld%ld",&n,&m);
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			fscanf (f,"%ld",&x[i][j]);
	do
	{
		efectuat=1;
		for (i=1;i<=n;i++)
		{
			suma=0;
			for (j=1;j<=m;j++)
				suma+=x[i][j];
			if (suma<0)
			{
				efectuat=0;
				for (j=1;j<=m;j++)
					x[i][j]=-x[i][j];
			}
		}
		for (j=1;j<=m;j++)
		{
			suma=0;
			for (i=1;i<=n;i++)
				suma+=x[i][j];
			if (suma<0)
			{
				efectuat=0;
				for (i=1;i<=n;i++)
					x[i][j]=-x[i][j];
			}
		}
	}
	while (efectuat==0);
	suma=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			suma+=x[i][j];
	fprintf (g,"%ld",suma);
	fclose(f);
	fclose(g);
}