Cod sursa(job #856536)

Utilizator razvanbhRotaru Razvan razvanbh Data 16 ianuarie 2013 17:40:45
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>

int n,m,a[16][16];

void Citire()
{
	int i,j;
	FILE *f;
	f=fopen("flip.in","r");
	fscanf(f,"%d %d",&n,&m);
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			fscanf(f,"%d",&a[i][j]);
}

void FlipLinie(int x)
{
	int i;
	for(i=0;i<m;i++)
		a[x][i]*=-1;
}

void FlipColoana(int x)
{
	int i;
	for(i=0;i<n;i++)
		a[i][x]*=-1;
}
void flip()
{
	int ok=1,sl[16],sc[16],slmin,scmin,i,j;
	while(ok)
	{
		for(i=0;i<n||i<m;i++)
			sl[i]=sc[i]=0;
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
			{
				sl[i]+=a[i][j];
				sc[j]+=a[i][j];
			}
		slmin=0;
		for(i=1;i<n;i++)
			if(sl[slmin]>sl[i])
				slmin=i;
		scmin=0;
		for(i=1;i<m;i++)
			if(sc[scmin]>sc[i])
				scmin=i;
		if(sl[slmin]<0||sc[scmin]<0)
		{
			if(sl[slmin]>sc[scmin])
				FlipColoana(scmin);
			else
				FlipLinie(slmin);
		}
		else
			ok=0;
	}

}


int main()
{
	int i,j,s=0;
	FILE *o;
	Citire();
	o=fopen("flip.out","w");
	flip();
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			s+=a[i][j];
	fprintf(o,"%d",s);
	return 0;
}