Cod sursa(job #454372)

Utilizator DD1994Mincu Dragos DD1994 Data 11 mai 2010 22:31:49
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 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,lin,col;
	long long int suma,min;
	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
	{
		min=1;lin=0;col=0;
		efectuat=1;
		for (i=1;i<=n;i++)
		{
			suma=0;
			for (j=1;j<=m;j++)
				suma+=x[i][j];
			if (suma<min)
			{
				min=suma;
				lin=i;
				efectuat=0;
			}
		}
		for (j=1;j<=m;j++)
		{
			suma=0;
			for (i=1;i<=n;i++)
				suma+=x[i][j];
			if (suma<min)
			{
				min=suma;
				col=j;
				efectuat=0;
			}
		}
		if (col>0)
			for (i=1;i<=n;i++)
				x[i][col]=-x[i][col];
		else
			for (j=1;j<=m;j++)
				x[lin][j]=-x[lin][j];
	}
	while (efectuat==0);
	suma=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			suma+=x[i][j];
	fprintf (g,"%lld",suma);
	fclose(f);
	fclose(g);
	return 0;
}