Cod sursa(job #386715)

Utilizator SelonyEcho Slam Selony Data 25 ianuarie 2010 19:50:53
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
int m,n,i,j,st[34];
long a[17][17],s,s2;
FILE *f=fopen("flip.in","r"),*g=fopen("flip.out","w");
int main(void)
{
	fscanf(f,"%d%d",&n,&m);
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
		{	
			fscanf(f,"%ld",&a[i][j]);
			s=s+a[i][j];
		}
	int k=1;
	st[1]=1;
	s2=s;
	while (k>0)
	{
		if (st[k]<=n)
			for (j=1;j<=m;j++) {s2=s2-2*a[st[k]][j]; a[st[k]][j]=a[st[k]][j]*(-1);}
		else for (i=1;i<=n;i++) {s2=s2-2*a[i][st[k]%n]; a[i][st[k]%n]=a[i][st[k]%n]*(-1);}
		if (s2>s)
			s=s2;
		if (st[k]<n+m) {k++; st[k]=st[k-1]+1;}
		else {while (st[k]==n+m)
			{
			   for (i=1;i<=n;i++) {s2=s2-2*a[i][st[k]%n]; a[i][st[k]%n]=a[i][st[k]%n]*(-1);}
			   k--; 
		    }
			  if (k>0)
			{
				if (st[k]<=n)
			for (j=1;j<=m;j++) {s2=s2-2*a[st[k]][j]; a[st[k]][j]=a[st[k]][j]*(-1);}
			else for (i=1;i<=n;i++) {s2=s2-2*a[i][st[k]%n]; a[i][st[k]%n]=a[i][st[k]%n]*(-1);}
			st[k]++;
			}
		    }
	}
	fprintf(g,"%ld\n",s);
	fclose(g);
	return 0;
}