Cod sursa(job #790145)

Utilizator googolplexeGoogol googolplexe Data 20 septembrie 2012 16:03:59
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>

using namespace std;

int a[16][16],n=0,m=0,sum=0;

ifstream f("flip.in");
ofstream g("flip.out");

void cit()
{
	int i,j;
	f>>n>>m;
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			f>>a[i][j];
	f.close();
}

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

void rezolv()
{
	int i,j;
	long *oriz = (long*)calloc(n,sizeof(long));
	long *vert = (long*)calloc(m,sizeof(long));
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < m; j++)
		{
			oriz[i] += a[i][j];
			vert[j] += a[i][j];
		}
	}
	for(i = 0; i<n;i++)
	{
		long sumNow = a[i][0];
		for(j=1;j<m;j++)
		{
			sumNow+=a[i][j];
		}
		long gain = 0;
		for(j=0;j<m;j++)
		{
			gain += vert[j] - ((vert[j] - a[i][j])+((-1)*a[i][j]));
		}
		if(gain > 0)
		{
			printf("change line %d\n",i+1);
			for(j=0;j<m;j++)
			{
				a[i][j]*=(-1);
				oriz[i] += a[i][j];
				vert[j] = (vert[j] -((-1)*a[i][j]))+a[i][j];
			}
			
		}
	}
/*
	for(j = 0; j<m;j++)
	{
		long sumNow = a[0][j];
		long sumIfChange = (-1)*a[0][j];
		for(i=1;i<n;i++)
		{
			sumNow+=a[i][j];
			sumIfChange += (-1)*a[i][j];
		}
		if(sumNow < sumIfChange)
		{
			for(i=0;i<n;i++)
				a[i][j]*=(-1);
		}
	}*/
	suma();
	g<<sum;
	printf("%d",sum);
}

int main()
{
	cit();
	rezolv();
	g.close();
	getchar();
	return 0;

}