Cod sursa(job #34990)

Utilizator n_lichkingSentes Norbert n_lichking Data 21 martie 2007 18:28:20
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb

#include<stdio.h>
int n,m,sw;
long a[17][17],t[17][17];
FILE *f=fopen("flip.in","r");
FILE *g=fopen("flip.out","w");

void cit()
{
 fscanf(f,"%d%d",&n,&m);
  for(register int i=1;i<=n;i++)
	for(register int j=1;j<=m;j++)
	{fscanf(f,"%ld",&a[i][j]);
	t[i][j]=a[i][j];}
}
int adun(long x[][17])
{   long s=0;
 for(register int i=1;i<=n;i++)
  for(register int j=1;j<=m;j++)
   s+=x[i][j];

   return s;

}

void flip1()
{ long sp,sn;
  for(register int i=1;i<=n;i++)
  {sp=sn=0;
   for(register int j=1;j<=m;j++)
    if(a[i][j]>0)
    sp+=a[i][j];
	else sn+=a[i][j];

   if(sp<-sn)
    {sw=1;
    for(register int j=1;j<=m;j++)
      t[i][j]*=-1;
   if(adun(a)<adun(t))
	  for(register int j=1;j<=m;j++)
	   a[i][j]*=-1;
    }}



}


void flip2()
{ long sp,sn;

  for(register int j=1;j<=m;j++)
  {sp=sn=0;
   for(register int i=1;i<=n;i++)
   if(a[i][j]>0)
    sp+=a[i][j];
	else sn+=a[i][j];

   if(sp<-sn)
    {sw=1;
     for(register int i=1;i<=n;i++)
      t[i][j]*=-1;
	if(adun(a)<adun(t))
	  for(register int i=1;i<=n;i++)
	   a[i][j]*=-1;
    }}


}

int main()
{
 cit();
 sw=1;
 while(sw)
 {sw=0;
 flip1();
 flip2();
 }
 fprintf(g,"%ld",adun(a));
 fcloseall();
 return 0;
}