Cod sursa(job #21777)

Utilizator vlad3rsterian vladut vlad3r Data 24 februarie 2007 13:22:14
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
FILE *in,*out;

int min(int aux[17],int max)
	{
	int micul=0,i;
	for(i=1;i<max;i++)
		if(aux[micul]>aux[i]) micul=i;
	return micul;

	}

int main()
{
int i,j,suma=0;
int gata=0,pozitie;
int n,m,mat[17][17],c[17],l[17];
in=fopen("flip.in","r");
out=fopen("flip.out","w");
fscanf(in, "%d %d", &n,&m);
for(i=0;i<17;i++)
	{c[i]=0;
	l[i]=0;}
if(n==1 && m==1)
	{
	fscanf(in, "%d", &n);
	if(n<0) fprintf(out,"%d",(-1)*n);
	else  fprintf(out,"%d",n);
	fclose(in);
	fclose(out);
	}
else
	{
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			{
			fscanf(in,"%d",&mat[i][j]);
			l[i]+=mat[i][j];
			c[j]+=mat[i][j];
			suma+=mat[i][j];
			}
    ///// PENNTRU COLOANE
	 while(gata==0)
		{
		gata=1;
		pozitie=min(c,m);
		if(suma<suma-c[pozitie]+(-1)*c[pozitie])
			{
			suma=suma-c[pozitie]+(-1)*c[pozitie];
			c[pozitie]=(-1)*c[pozitie];
			for(i=0;i<n;i++)
				{
				l[i]=l[i]-mat[i][pozitie]+(-1)*mat[i][pozitie];
				mat[i][pozitie]=(-1)*mat[i][pozitie];
				}
			gata=0;
			}
		}
    /////PENTRU LINII
	 gata=0;
	 while(gata==0)
		{
		gata=1;
		pozitie=min(l,n);

		if(suma<suma-l[pozitie]+(-1)*l[pozitie])
			{
			suma=suma-l[pozitie]+(-1)*l[pozitie];
			l[pozitie]=(-1)*l[pozitie];
			for(i=0;i<m;i++)
				{
				c[i]=c[i]-mat[pozitie][i]+(-1)*mat[pozitie][i];
				mat[pozitie][i]=(-1)*mat[pozitie][i];
				}
			gata=0;
			}
		}
	fprintf(out,"%d",suma);
	fclose(in);
	fclose(out);
	}
return 0;
}