Cod sursa(job #1380282)

Utilizator AltimosPanaite Adrian Altimos Data 7 martie 2015 10:53:24
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>

int suma(int a[][16], int n, int m)
{
	int i,j,s=0;
	for (i=0;i<n;i++)
		for (j=0;j<m;j++)
			s+=a[i][j];
	return s;
}

void f(int a[][16], int b[][16] , int n, int m)
{
	int i,j;
	for (i=0;i<n;i++)
		for (j=0;j<m;j++)
			b[i][j]=a[i][j];
}

void flip(int a[][16], int b[][16], int n, int m)
{
	int i,j,s;
	for (i=0;i<n;i++)
	{
		s=0;
		for (j=0;j<m;j++)
			s+=a[i][j];
		if(s<0)
		{
			for (j=0;j<m;j++)
				a[i][j]*=(-1);
			if (suma(a,n,m)>suma(b,n,m))
				f(a,b,n,m);
			flip(a,b,n,m);
		}
	}
	for (i=0;i<m;i++)
	{
		s=0;
		for (j=0;j<n;j++)
			s+=a[j][i];
		if(s<0)
		{
			for (j=0;j<n;j++)
				a[j][i]*=(-1);
			if (suma(a,n,m)>suma(b,n,m))
				f(a,b,n,m);
			flip(a,b,n,m);
		}
	}
}

int main()
{
	int n,m,i,j,s,a[16][16],b[16][16];
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d", &n, &m);
	for (i=0;i<n;i++)
		for(j=0;j<m;j++)
		{
			scanf("%d", &a[i][j]);
			b[i][j]=a[i][j];
		}
	flip(a,b,n,m);
	s=0;
	for (i=0;i<n;i++)
		for(j=0;j<m;j++)
			s+=b[i][j];
	printf("%d\n", s);
	fclose(stdin);
	fclose(stdout);
	return 0;
}