Cod sursa(job #241406)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 9 ianuarie 2009 23:53:50
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <stdio.h>

int main()
{
	int n,m,s1,s2,v[17][17],sm,sp,i,j;
	freopen ("flip.in","r",stdin);
	freopen ("flip.out","w",stdout);
	scanf ("%d%d",&n,&m);
	s1 = 0;
	for (i = 1; i <= n; ++i)
		for (j = 1; j <= m; ++j)
		{
			scanf ("%d",&v[i][j]);
			s1+=v[i][j];
		}
	s2=s1;
	for (i = 1; i <= n; ++i)
	{
		sm = 0;
		sp = 0;
		for (j = 1; j <= m; ++j)
		{
			if (v [i][j] > 0)
				sp+=v[i][j];
			if (v [i][j] < 0)
				sm+=v[i][j];
		}
		if (-sm > sp)
		{
			for (j = 1; j <= m; ++j)
				v [i][j]*=-1;
			s1 = s1 - 2 * sm - 2 * sp;
		}
	}
	for (j = 1; j <= m; ++j)
	{
		sm = 0;
		sp = 0;
		for (i = 1; i <= n; ++i)
		{
			if (v [i][j] > 0)
				sp+=v[i][j];
			if (v [i][j] < 0)
				sm+=v[i][j];
		}
		if (-sm > sp)
		{
			for (i = 1; i <= n; ++i)
				v [i][j]*=-1;
			s1 = s1 - 2 * sm - 2 * sp;
		}
	}
	for (j = 1; j <= m; ++j)
	{
		sm = 0;
		sp = 0;
		for (i = 1; i <= n; ++i)
		{
			if (v [i][j] > 0)
				sp+=v[i][j];
			if (v [i][j] < 0)
				sm+=v[i][j];
		}
		if (-sm > sp)
		{
			for (i = 1; i <= n; ++i)
				v [i][j]*=-1;
			s2 = s2 - 2 * sm - 2 * sp;
		}
	}
	for (i = 1; i <= n; ++i)
	{
		sm = 0;
		sp = 0;
		for (j = 1; j <= m; ++j)
		{
			if (v [i][j] > 0)
				sp+=v[i][j];
			if (v [i][j] < 0)
				sm+=v[i][j];
		}
		if (-sm > sp)
		{
			for (j = 1; j <= m; ++j)
				v [i][j]*=-1;
			s2 = s2 - 2 * sm - 2 * sp;
		}
	}
	if (s1 > s2)
		printf ("%d",s1);
	else printf ("%d",s2);
	return 0;
}