Cod sursa(job #75555)

Utilizator alex23alexandru andronache alex23 Data 3 august 2007 13:02:17
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>


int s_max,s,i,j,k,a[20][20],max,p,v[1000000],m,n,q,l,h;

int main()
{FILE *fin,*fout;



fin=fopen("flip.in","r");
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++)
   for (j=1;j<=m;j++)
     fscanf(fin,"%d",&a[i][j]);

fclose(fin);

s_max=0;
for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
      s_max+=a[i][j];

max=1;p=1;v[1]=1;
s=0;
for (j=1;j<=n;j++)
   {a[i][m]=-a[i][m];
    s+=a[i][m];
    }
if (s>s_max) s_max=s;

for (i=2;i<=n+m;i++)
  {max++;
   p++;
   v[p]=max;
   if ((n+m-v[p]+1)>n) {s=0;
		       for (j=1;j<=n;j++)
			   a[j][m-v[p]+1]=-a[j][m-v[p]+1];
		       for (l=1;l<=n;l++)
			  for (h=1;h<=m;h++)
			     s=s+a[l][h];
		       if (s>s_max) s_max=s;
		       }
		 else {s=0;
		       for (j=1;j<=m;j++)
			   a[n+m-v[p]+1][j]=-a[n+m-v[p]+1][j];
		       for (l=1;l<=n;l++)
			  for (h=1;h<=m;h++)
			     s=s+a[l][h];
		       if (s>s_max) s_max=s;
		       }
   q=p-1;
   for (j=1;j<=q;j++)
	{p++;
	 v[p]=v[j];
	 if ((n+m-v[j]+1)>n) {s=0;
			      for (k=1;k<=n;k++)
				  a[k][m-v[j]+1]=-a[k][m-v[j]+1];
			      for (l=1;l<=n;l++)
				 for (h=1;h<=m;h++)
				     s=s+a[l][h];
			      if (s>s_max) s_max=s;
			      }
			else {s=0;
			      for (k=1;k<=m;k++)
				  a[n+m-v[j]+1][k]=-a[n+m-v[j]+1][k];
			      for (l=1;l<=n;l++)
				   for (h=1;h<=m;h++)
				      s=s+a[l][h];
			      if (s>s_max) s_max=s;
			      }
	  }
  }



fout=fopen("flip.out","w");
fprintf(fout,"%d",s_max);
fclose(fout);

return 0;
}