Cod sursa(job #22756)

Utilizator poepiPoenaru Iulian poepi Data 27 februarie 2007 12:17:55
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
int n,m;
long a[17][17];
int main()
{
	long s1=0,s2=0,sl[17]={0},sc[17]={0},var=0;
	int i,j,minus=-1,k;
	FILE *f=fopen("flip.in","r"),*g=fopen("flip.out","w");
	fscanf(f,"%d %d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			fscanf(f,"%ld",&a[i][j]);

	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			sl[i]+=a[i][j];
	s1+=sl[i];
	}
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			sc[i]+=a[j][i];

	for(i=1;i<=n;i++)
		if(sl[i]==0)
		{
			for(j=1;j<=m;j++)
				if(a[i][j]<0)
					s2+=sc[j]+2*a[i][j]*minus;
				else
					if(a[i][j]>0)
					{
						var=a[i][j]*minus*2;
						if(var+sc[j]<0)
							s2+=minus*(var+sc[j]);
						var=0;
					}
			if(s2>s1)
				for(j=1;j<=m;j++)
				{
					a[i][j]=a[i][j]*minus;
					if(a[i][j]<0)
						for(k=1;k<=n;k++)
							a[j][k]=a[j][k]*minus;
				}
			s1=s2;
			s2=0;
		}

	for(i=1;i<=m;i++)
		if(sc[i]==0)
		{
			for(j=1;j<=n;j++)
				if(a[j][i]<0)
					s2+=sl[j]+2*a[j][i]*minus;
				else
					if(a[j][i]>0)
					{
						var=a[j][i]*minus*2;
						if(var+sl[j]<0)
							s2+=minus*(var+sl[j]);
						var=0;
					}
			if(s2>s1)
				for(j=1;j<=n;j++)
				{
					a[j][i]=a[j][i]*minus;
					if(a[j][i]<0)
						for(k=1;k<=m;k++)
							a[k][j]=a[k][j]*minus;
				}
			s1=s2;
			s2=0;
		}
	fprintf(g,"%ld",s1);
	fclose(f);
	fclose(g);
	return 0;

}