Cod sursa(job #2280253)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 10 noiembrie 2018 13:03:31
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include<stdio.h>

int a[16][16];

using namespace std;

int main() {
    FILE *fin, *fout;
    int i, mod, s1, s2, x, y, n, m, j, i1, j1, i2, j2, sum, sum1, sum2, sum3, max, nrl, nrc, summ1, summ2, summ3, summ4;

    fin=fopen("flip.in", "r");
    fout=fopen("flip.out", "w");
    fscanf( fin, "%d %d", &n, &m);
    sum=0;
    for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++) {
            fscanf( fin, "%d", &a[i][j]);
            sum=sum+a[i][j];
        }
    }
    nrl=(1<<n)-1;
    max=0;
    for(i1=0; i1<nrl; i1++) {
            sum1=sum;
            sum2=sum;
        for(j1=0; j1<n; j1++) {
            s1=0;
            s2=0;
            for(x=1; x<=m; x++) {
                s1=s1+a[j1+1][x];
                mod=a[j1+1][x]-2*a[j1+1][x];
                s2=s2+mod;
            }
            if((i1>>j1)&1!=0) {
                sum1=sum1-s1+s2;
            }
            else {
                sum2=sum2-s1+s2;
            }
        }
        nrc=(1<<m)-1;
        for(i2=0; i2<nrc; i2++) {
            summ1=sum1;
            summ2=sum2;
            summ3=sum1;
            summ4=sum2;
            for(j2=0; j2<m; j2++) {
                s1=0;
                s2=0;
                for(y=1; y<=n; y++) {
                    s1=s1+a[y][j2+1];
                    mod=a[y][j2+1]-2*a[y][j2+1];
                    s2=s2+mod;
                }
                if((i2>>j2)&1!=0) {
                    summ1=summ1-s1+s2;
                    summ2=summ2-s1+s2;
                }
                else {
                    summ3=summ3-s1+s2;
                    summ4=summ4-s1+s2;
                }
            }
            if(summ1>max) {
                max=summ1;
            }
            if(summ2>max) {
                max=summ2;
            }
            if(summ3>max) {
                max=summ3;
            }
            if(summ4>max) {
                max=summ4;
            }
        }

    }
    fprintf( fout, "%d", max);
    fclose( fin );
    fclose( fout );
    return 0;
}