Cod sursa(job #2947)

Utilizator vasi1186Chindris Vasile vasi1186 Data 19 decembrie 2006 23:06:24
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>

#define N 16

long matrice[N][N];
int n,m;
/*******************************/
void citire(void)
{
  FILE *f;
  int i,j;
  
    f=fopen("flip.in","rt");
     fscanf(f,"%d %d\n",&n,&m);
	 for (i=0; i<n; i++)
	 {
	    for (j=0; j<m; j++)
			  fscanf(f,"%ld ",&matrice[i][j]);
		fscanf(f,"\n");
	 }
	fclose(f);
     
}
/*******************************/
long suma_linie(int x)
{
  int i,rez=0;

    for (i=0; i<m; rez+=matrice[x][i],i++);
	return rez;
}
long suma_coloana(int x)
{
  int i, rez=0;

     for (i=0; i<n; rez+=matrice[i][x],i++);
	 return rez;
}
/*******************************/
void schimba_linie(int x)
{
  int i;

    for (i=0; i<m; matrice[x][i]*=-1, i++);
}
/*******************************/
void schimba_coloana(int x)
{
  int i;

    for (i=0; i<n; matrice[i][x]*=-1, i++);
}
/*******************************/
void afisare(void)
{
  FILE *f;
  int i,j;
  long suma=0;
    
      for (i=0; i<n; i++)
		  for (j=0; j<m; suma+=matrice[i][j],j++);
	  f=fopen("flip.out","wt");
        fprintf(f,"%ld",suma);
	  fclose(f);
}
/*******************************/
int main(void)
{
  int gata=0,i;

  citire();
     while (!gata)
	 {
		 gata=1;
	    for (i=0; i<n; i++)
			if (suma_linie(i)<0)
			{
			  gata=0;
			  schimba_linie(i);
			}
		for (i=0; i<m; i++)
			if (suma_coloana(i)<0)
			{
			   gata=0;
			   schimba_coloana(i);
			}

	 }
	 afisare();
	return 0;
}
/*******************************/