Cod sursa(job #17281)

Utilizator cypryCiprian Oprisa cypry Data 15 februarie 2007 16:24:34
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#define NMax 100

long a[NMax][NMax],n,m,s;

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

void flip_l(int i)
{
 for(int j=1;j<=m;j++)
  a[i][j]=(-1)*a[i][j];
}

void flip_c(int j)
{
 for(int i=1;i<=n;i++)
  a[i][j]=(-1)*a[i][j];
}

void transforma(void)
{
 int changed=0,i,j;
 long si,sf;
 do{
   changed=0;
   //parcurge liniile
   for(i=1;i<=n;i++)
    {
     si=0;
     sf=0;
     for(j=1;j<=m;j++)
      {
       si+=a[i][j];
       sf+=(-1)*a[i][j];
      }
     if(sf>si)
      {
       flip_l(i);
       changed=1;
      }
    }
   //parcurge coloanele
   for(j=1;j<=m;j++)
    {
     si=0;
     sf=0;
     for(i=1;i<=n;i++)
      {
       si+=a[i][j];
       sf+=(-1)*a[i][j];
      }
     if(sf>si)
      {
       flip_c(j);
       changed=1;
      }
    }
 }while(changed);
}

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

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

int main(void)
{
 citire();
 transforma();
 s=suma();
 afisare();
 return 0;
}