Cod sursa(job #41252)

Utilizator the_alch3m1stJeler Stefan the_alch3m1st Data 28 martie 2007 08:30:02
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <stdio.h>

FILE *fin,*fout;
long int a[16][16],n,k[16][16],m,t[16][16];

int citire()
{int i,j;
    fin=fopen("flip.in","r");
    fscanf(fin,"%d%d",&n,&m);
    for(i=0;i<n;i++)
       for(j=0;j<m;j++) fscanf(fin,"%d",&a[i][j]);
    fclose(fin);
return 0;
}

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

int copiere(int opt)
{int i,j;

if(opt==1)
   {for(i=0;i<n;i++)
       for(j=0;j<m;j++)
          k[i][j]=a[i][j];
    }
if(opt==2)
   {for(i=0;i<n;i++)
       for(j=0;j<m;j++)
          a[i][j]=k[i][j];
    }
if(opt==3)
    {for(i=0;i<n;i++)
        for(j=0;j<m;j++)
         t[i][j]=k[i][j];
    }

if(opt==4)
    {for(i=0;i<n;i++)
        for(j=0;j<m;j++)
          a[i][j]=t[i][j];
    }   
if(opt==5)
    {for(i=0;i<n;i++)
        for(j=0;j<m;j++)
          k[i][j]=t[i][j];
    } 
if(opt==6)
    {for(i=0;i<n;i++)
        for(j=0;j<m;j++)
         t[i][j]=a[i][j];
    }
  
        
}
int comutator()

{int i,j,mod=1, c,d,no;

copiere(1);
 while(mod)
 { mod=0;
      
     
     for(i=0;i<n;i++)
     {no=0;
        for(j=0;j<m;j++)
          {k[i][j]=k[i][j]*-1;}
      copiere(6);
       for(c=0;c<m;c++)
          {
           for(d=0;d<n;d++)
             {t[d][c]*=-1;}
           if(suma(t)>=suma(k)) no=1;
           copiere(6);
           }
       if(suma(k)>=suma(a)&&!no){ copiere(2);mod=1;}
         else copiere(1);
       }
             
      

      
    for(i=0;i<m;i++)
     {no=0;
      for(j=0;j<n;j++)
        {k[j][i]=k[j][i]*-1;}
      copiere(6);
       for(c=0;c<n;c++)
          {
           for(d=0;d<m;d++)
             {t[c][d]*=-1;}
           if(suma(t)>=suma(k)) no=1;
           copiere(6);
           }
       if(suma(k)>=suma(a)&&!no){ copiere(2);mod=1;}
         else copiere(1);
       }
             
      
     
      
    
      
  
  }
 return 0;
}
int scriere()
{
    fout=fopen("flip.out","w");
    fprintf(fout,"%d",suma(a));
    fclose(fout);
return 0;
}

int main()
{citire();
comutator();
scriere();
return 0;
}