Cod sursa(job #446099)

Utilizator om6gaLungu Adrian om6ga Data 24 aprilie 2010 23:23:58
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <stdlib.h>

int **a,m,n;

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


long long sumaL(int l)
{
     int i;
     long long r=0;
     for (i=0;i<m;i++)
         r+=a[l][i];
     return r;
}


long long sumaC(int c)
{
     int i;
     long long r=0;
     for (i=0;i<n;i++)
         r+=a[i][c];
     return r;
}




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



void flipC(int c)
{
     int i;
     for (i=0;i<n;i++)
         a[i][c]*=(-1);
}




int main()
{
    int i,j;
    FILE *in,*out;
    in=fopen("flip.in","r");
    out=fopen("flip.out","w");
    fscanf(in,"%d %d",&n,&m);  
    a=malloc(n*sizeof(int *));
    
    for (i=0;i<n;i++)
    {
        a[i]=malloc(m*sizeof(int));
        for (j=0;j<m;j++)
            fscanf(in,"%d",&a[i][j]); 
    }
    
    for (i=0;i<n;i++)
    {
    for (j=0;j<m;j++)
        printf("%d ",a[i][j]);
        printf("\n");
    }
    int gata=0,cont;
    while (!gata)
    {
          cont=0;
          for (i=0;i<n;i++)      
              if(sumaL(i)<0)
              {
                  flipL(i);
                  printf("flip linia %d\n",i);
                  cont=1;
              }
          for (j=0;j<m;j++)
              if (sumaC(j)<0)
              {
                 flipC(j);
                 cont=1;   
                 printf("flip coloana %d\n",j);
              }
          if (cont==0)
             gata=1;
    }
    fprintf(out,"%lld",suma());
    return 0;
}