Cod sursa(job #114713)

Utilizator Poisoned_IvyAnda Nicolae Poisoned_Ivy Data 15 decembrie 2007 15:25:30
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <stdio.h>
#include <malloc.h>

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


void prelSol()
{
    int i;
    double s=0;
    
    f=fopen("flip.in","r");
   
    fscanf(f,"%d %d",&n, &m);
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
            fscanf(f,"%lf",&a[i][j]);
/*     fprintf(g,"a initial\n");
       for (i=0; i<n; i++)        
       {
           for (j=0; j<m; j++)
               fprintf(g,"%lf  ",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,"%lf  ",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++)
               a[i][j]=a[i][j]*(-1);
 
    for (j=0; j<m; j++)
        if (x[n+j]==0) 
           for (i=0; i<n; i++)
               a[i][j]=a[i][j]*(-1);
 
/*/       for (i=0; i<n; i++)        
       {
           for (j=0; j<m; j++)
               fprintf(g,"%lf  ",b[i][j]);
           fprintf(g,"\n");
       }*/
    s=0;
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
               s+=a[i][j];
    if (s>max) 
    {
       max=s;
    }

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


void back()
{
     int k;
     for (k=0; k<m+n; k++)
         x[k]=-1;
     k=0;
     while (k>=0)
           if (k==n+m)
           {
              prelSol();
              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=(double**) malloc (n*sizeof(double));
    for (i=0; i<n; i++)
        a[i]=(double*) calloc (m,sizeof(double));

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