Cod sursa(job #1499581)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 10 octombrie 2015 20:27:50
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <iostream>
#include <stdio.h>
#include <climits>

using namespace std;

int flip[16][16];
int cpyflip[16][16];
int ls,cs;

int pow2(int cs){
    int i,p=1;
    for(i=0;i<cs;i++){
        p<<=1;
    }
    return p;
}

void invlin(int nrlin){
    int i;
    for(i=0;i<cs;i++){
        cpyflip[nrlin][i]*=-1;
    }
}

void invcol(int nrcol){
    int i;
    for(i=0;i<ls;i++){
        cpyflip[i][nrcol]*=-1;
    }
}

int verif(int nrcol){
    int i,s1=0;
    for(i=0;i<ls;i++){
        s1+=cpyflip[i][nrcol];
    }
    if(s1<0){
        return 1;
    }
    return 0;
}

int main()
{   int i,j;
    int ntry;
    int temp;
    int rez,s,maxim=INT_MIN;
    int i1,j1;
    int nrlin;

    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);

    scanf("%d%d",&ls,&cs);

    for(i=0;i<ls;i++){
        for(j=0;j<cs;j++){
            scanf("%d",&flip[i][j]);
        }
    }

    ntry=pow2(ls);
    for(i=0;i<ntry;i++){
        s=0;
        for(i1=0;i1<ls;i1++){
            for(j1=0;j1<cs;j1++){
                cpyflip[i1][j1]=flip[i1][j1];
            }
        }
        temp=i;
        for(nrlin=0;temp;nrlin++){
            if(temp%2==1){
                invlin(nrlin);
            }
            temp/=2;
        }
//        //printam
//        for(i1=0;i1<ls;i1++){
//            for(j1=0;j1<cs;j1++){
//                printf("%3d",cpyflip[i1][j1]);
//            }
//            printf("\n");
//        }
//        printf("\n\n");
        //pe coloane
        if(i==4){
            temp++;
        }
        for(j=0;j<cs;j++){
            rez=verif(j);
            if(rez==1){
                invcol(j);
            }
        }
        for(i1=0;i1<ls;i1++){
            for(j1=0;j1<cs;j1++){
                s+=cpyflip[i1][j1];
            }
        }
        if(s>maxim){
            maxim=s;
        }
    }

    printf("%d",maxim);

    return 0;
}