Cod sursa(job #52521)

Utilizator cotofanaCotofana Cristian cotofana Data 19 aprilie 2007 09:53:05
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#define dim 16

int n, m;
long s=0, a[dim][dim];

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

void actualizare()
{
	int i, j;
	for (i=0; i<n; i++) a[i][m]=0;
	for (j=0; j<m; j++) a[n][j]=0;
	for (i=0; i<n; i++)
		for (j=0; j<m; j++)
		{
			a[n][j]+=a[i][j];
			a[i][m]+=a[i][j];
		}
}

void comutare(int el, int lin)
{
	int i;
	if (lin==1) for (i=0; i<m; i++) a[el][i]*=-1;
	else for (i=0; i<n; i++) a[i][el]*=-1;
}

void cautare_minim()
{
	int i, j, lin;
	long min;
	min=2000000;
	for (j=0; j<m; j++)
		if (a[n][j]<min)
		{
			min=a[n][j];
			poz=j;
			lin=0;
		}
	for (i=0; i<n; i++)
		if (a[i][m]<min)
		{
			min=a[i][m];
			poz=i;
			lin=1;
		}
	comutare(poz, lin);
}

int verificare()
{
	int i, j;
	actualizare();
	for (j=0; j<m; j++)
		if (a[n][j]<0) return 0;
	for (i=0; i<n; i++)
		if (a[i][m]<0) return 0;
	return 1;
}

void suma()
{
	int i;
	for (i=0; i<n; i++)
		s+=a[i][m];
}

void tip()
{
	FILE *f=fopen("flip.out", "w");
	fprintf(f, "%ld", s);
	fclose(f);
}

int main()
{
	cit();
	while (!verificare()) cautare_minim();
	suma();
	tip();
	return 0;
}