Cod sursa(job #209639)

Utilizator albuaAlbu Alexandru albua Data 23 septembrie 2008 19:28:45
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <values.h>

//using namespace std;

FILE *f,*g;

long a[17][17];
long sc[17],sl[17],suma=0-MAXLONG;
int i,j,n,m,ok;

long calculeaza_suma()
{
  int i,j;
	long tsum=0;
  for(i=1;i<=n;i++)
    tsum+=sl[i];
  return tsum;
}

void invcol(int j)
{
  int i;
	for(i=1;i<=n;i++)
	  {
	    a[i][j]*=-1;
			sl[i]+=2*a[i][j];
		}
}

void invlin(int i)
{
  int j;
	for(j=1;j<=m;j++)
	  {
	    a[i][j]*=-1;
			sc[j]+=2*a[i][j];
		}
}

int main()
{
  f=fopen("flip.in","r");
	g=fopen("flip.out","w");
	fscanf(f,"%d %d\n",&n,&m);
	//citire
	for(i = 1; i <= n;i++)
	  for(j = 1;j <= m;j++)
		  {
		    fscanf(f,"%ld",&a[i][j]);
				sc[j]+=a[i][j];
				sl[i]+=a[i][j];				
			}
	ok=1;
	while(ok)
	  {
		  ok=0;
			for(j=1;j<=m;j++)
				if(sc[j]<0)
					{
						invcol(j);
						sc[j]=-sc[j];
					}
			for(i=1;i<=n && !ok;i++)
				if(sl[i]<0)
			    ok=1; 
		  if(ok)
			for(i=1;i<=n;i++)
				if(sl[i]<0)
					{
						invlin(i);
						sl[i]=-sl[i];
					}
			for(j=1;j<=m && !ok;j++)
				if(sc[j]<0)
			    ok=1; 
		}
	fprintf(g,"%ld\n",calculeaza_suma());
	fclose(f);   fclose(g);
  return 0;
}