Cod sursa(job #21973)

Utilizator poepiPoenaru Iulian poepi Data 25 februarie 2007 12:12:19
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
int n,m;
long a[17][17];
int main()
{
	long s=0,sminus=0,splus=0,nrv=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++)
	{sminus=0;splus=0;
		for(j=1;j<=m;j++)
		{
			
			if(a[i][j]<0)
				sminus+=a[i][j];
			else
				if(a[i][j]>=0)
				splus+=a[i][j];
		}
		if(sminus*minus>splus)
		{
			for(k=1;k<=m;k++)
				a[i][k]=a[i][k]*minus;
		}
		else
			if(sminus*minus==splus)
			{int ok=1;
				for(j=1;j<=m;j++)//linie
					if(a[i][j]>0)
					{int ok=1;nrv=0;
						for(k=1;k<=n;k++)//coloana
							if(k!=i)
								nrv+=a[j][k];
						if(a[i][j]<nrv)
							ok=0;
					}
				if(ok==1)
					for(j=1;j<=m;j++)
						a[i][j]=a[i][j]*minus;
			}


					

	}
	

														
	for(i=1;i<=m;i++)
	{sminus=0;splus=0;
		for(j=1;j<=n;j++)
		{				
			if(a[j][i]<0)
				sminus+=a[j][i];
			else
				if(a[j][i]>=0)
					splus+=a[j][i];
				
		}
		if(sminus*minus>splus)
		{
			for(k=1;k<=n;k++)
				a[k][i]=a[k][i]*minus;
		}
		else
			if(sminus*minus==splus)
			{int ok=1;
				for(j=1;j<=n;j++)
					if(a[j][i]>0)
					{int ok=1;nrv=0;
						for(k=1;k<=m;k++)
							if(k!=i)
								nrv+=a[j][k];
						if(a[j][i]<nrv)
							ok=0;
					}
				if(ok==1)
					for(j=1;j<=n;j++)
						a[j][i]=a[j][i]*minus;
			}
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			s+=a[i][j];


	fprintf(g,"%ld",s);
	fclose(g);
	fclose(f);
	return 0;
}