Cod sursa(job #1267534)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 19 noiembrie 2014 23:56:03
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <stdio.h>
FILE *fin, *fout;
int m, n, sum, max;
unsigned long int c, temp, pwr[32];
bool *v, f;
int main()
{
    fin = fopen("flip.in", "r");
    fout = fopen("flip.out", "w");
    pwr[0] = 1;
    for(int i =1; i< 32; i++) pwr[i] = pwr[i-1]*2;
    fscanf(fin, "%d%d", &m, &n);
    v = new bool[m+n];
    int arr1[m][n], arr2[m][n];
    for(int i= 0; i< m; i++)
    {
            for(int j =0; j< n; j++)
            {
                    fscanf(fin, "%d", &arr1[i][j]);
            }
    }
    max = -999999999;
    for(c = 0;c<pwr[m+n]; c++)
    {
                       for(int i = 0; i< m+n; i++) v[i] = 0;
                       for(int i = 0; i< m; i++)
                               for(int j= 0; j< n; j++)
                                       arr2[i][j] = arr1[i][j];
                       temp  = c;sum = 0;
                       for(int i =0; temp; i++)
                       {
                                  v[m+n-i] = temp%2;
                                  temp = temp/2;
                       }
                       for(int i = 0; i< m+n; i++)
                       {
                               if(i<n)
                               {
                                       if(!v[i]) continue;
                                       for(int j = 0; j< m; j++)
                                       {
                                                arr2[j][i]*=-1;
                                       }
                               }
                               else
                               {
                                   if(!v[i])continue;
                                   for(int j = 0; j< n; j++)
                                   {
                                           arr2[i-n][j]*=-1;
                                   }
                               }
                       }
                       for(int i =0; i< m; i++)
                               for(int j =0; j< n; j++)
                                       sum+=arr2[i][j];
                       if(!f)
                       {
                             f = 1;
                             max = sum;
                             continue;
                       }
                       if(sum > max) max = sum;
    }
    fprintf(fout, "%d", max);
    fclose(fin);
    fclose(fout);
    return 0;
}