Cod sursa(job #114705)

Utilizator Poisoned_IvyAnda Nicolae Poisoned_Ivy Data 15 decembrie 2007 15:09:45
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <stdio.h>
#include <malloc.h>

int i,j,m,n,p=0;
long max;
long **a, **b;
int *x;
FILE *f, *g;


void prelSol(long **b)
{
    int i;
    long s=0;
    
    a=(long**) malloc (n*sizeof(long));
    for (i=0; i<n; i++)
        a[i]=(long*) calloc (m,sizeof(long));
    f=fopen("D:\\flip.in","r");
   
    fscanf(f,"%d %d",&n, &m);
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
            fscanf(f,"%ld",&a[i][j]);
     b=a;
/*     fprintf(g,"a initial\n");
       for (i=0; i<n; i++)        
       {
           for (j=0; j<m; j++)
               fprintf(g,"%ld  ",a[i][j]);
           fprintf(g,"\n");
       }
    fprintf(g,"gata cu a\n");    

    fprintf(g,"b initial\n");
       for (i=0; i<n; i++)        
       {
           for (j=0; j<m; j++)
               fprintf(g,"%ld  ",b[i][j]);
           fprintf(g,"\n");
       }
    fprintf(g,"gata cu b\n");    
    for (i=0; i<m+n; i++)
        fprintf(g,"%d ",x[i]);
    fprintf(g,"\n");
*/
    for (i=0; i<n; i++)
        if (x[i]==0) 
           for (j=0; j<m; j++)
               b[i][j]=b[i][j]*(-1);
 
    for (j=0; j<m; j++)
        if (x[n+j]==0) 
           for (i=0; i<n; i++)
               b[i][j]=b[i][j]*(-1);
 
/*/       for (i=0; i<n; i++)        
       {
           for (j=0; j<m; j++)
               fprintf(g,"%ld  ",b[i][j]);
           fprintf(g,"\n");
       }*/
    s=0;
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
               s+=b[i][j];
    if (s>max) 
    {
       max=s;
    }

      // fprintf(g,"gata prelSol\n");
}


void back()
{
     int k;
     long **b=(long**) malloc (n*sizeof(long));
     for (i=0; i<n; i++)
         b[i]=(long*) calloc (m,sizeof(long));
     for (k=0; k<m+n; k++)
         x[k]=-1;
     k=0;
     while (k>=0)
           if (k==n+m)
           {
              prelSol(b);
              k--;
           }
           else if (x[k]<1)
           {
                x[k]++;
                k++;
           }
           else
           {
               x[k]=-1;
               k--;
           }
}


int main()
{
//    FILE *f, *g;
    max=0;
    f=fopen("flip.in","r");
    fscanf(f,"%d %d",&n, &m);
    x=(int*) malloc ((m+n)*sizeof(int));
    
    a=(long**) malloc (n*sizeof(long));
    for (i=0; i<n; i++)
        a[i]=(long*) calloc (m,sizeof(long));

    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
            fscanf(f,"%ld",&a[i][j]);
    g=fopen("flip.out","w");
    back();
    fprintf(g,"%ld",max);
    return 0;
}