Cod sursa(job #491889)

Utilizator dannywox969Trial and Error dannywox969 Data 12 octombrie 2010 18:33:25
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>

int mat[20][20],n,m,s,i,j,min,x;
int gata=0,rand, coloana;

void verificare()
{	
	/*for(i=1;i<=n;i++)
	{	for(j=1;j<=m;j++)
			printf("%d ", mat[i][j]);
		printf("\n");
	}*/
	
	min=0;
	
	for(i=1;i<=n;i++)
	{
		s=0;
		for(j=1;j<=m;j++)
		{
			s=s+mat[i][j];
		}
		if(i==1)
			min=s;
		if(s<=min)
		{	min=s; rand=1; coloana=0; x=i; }
	}
	//printf("min r=%d\n",min);
	
	for(i=1;i<=m;i++)
	{
		s=0;
		for(j=1;j<=n;j++)
		{
			s=s+mat[j][i];
		}
		
		if(s<min)
		{	min=s; rand=0; coloana=1; x=i; }
	}//printf("min c=%d\n",min);
	//printf("rand=%d coloana=%d x=%d min=%d\n\n\n",rand,coloana,x,min);
}


void changement()
{
	if(min<0)
	{	if(rand==1)
			for(i=1;i<=m;i++)
				mat[x][i]=mat[x][i]* -1;
		else
			for(i=1;i<=n;i++)
				mat[i][x]=mat[i][x]* -1;
	}
	else
		gata=1;

}
int main()
{
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	
	scanf("%d",&n);
	scanf("%d",&m);
	
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			scanf("%d",&mat[i][j]);

	do{
	verificare();
	changement();
	
	}while(gata==0);
		
	
	/*for(i=1;i<=n;i++)
	{	for(j=1;j<=m;j++)
			printf("%d ", mat[i][j]);
		printf("\n");
	}*/
	
	s=0;	
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			s=s+mat[i][j];
	printf("%d",s);
	
	return 0;

}