Cod sursa(job #939972)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 15 aprilie 2013 11:29:30
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include<fstream>
using namespace std;
int linsum[17][2], colsum[17][2], n, m, a[17][17];
void regen(){
    for(int i=1; i<=n; i++){
        linsum[i][0]=0; linsum[i][1]=0;
    }
    for(int i=1; i<=m; i++){
        colsum[i][0]=0; colsum[i][1]=0;
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            if(a[i][j]>0){
                linsum[i][0]+=a[i][j];
                colsum[j][0]+=a[i][j];
            }else{
                linsum[i][1]+=a[i][j];
                colsum[j][1]+=a[i][j];
            }
        }
}
void flipC(int x){
    for(int i=1; i<=n; i++){
        a[i][x]*=-1;
    }
}
void flipL(int x){
    for(int j=1; j<=m; j++){
        a[x][j]*=-1;
    }
}
int main(){
    ifstream in("flip.in");
    ofstream out("flip.out");
    in>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            in>>a[i][j];
        }
    int maxl, maxlp, maxc, maxcp; bool pp;
    do{
        pp=false;
        regen(); maxl=0; maxc=0;
        for(int i=1; i<=n; i++){
            if(linsum[i][0]+linsum[i][1]<0){
               maxl= (linsum[i][0]+linsum[i][1]) * -1;
               maxlp=i;
               pp=true;
            }
        }
        for(int i=1; i<=m; i++){
            if(colsum[i][0]+colsum[i][1]<0){
               maxc= (colsum[i][0]+colsum[i][1]) * -1;
               maxcp=i;
               pp=true;
            }
        }
        if(pp){
            if(maxc>maxl){
                flipC(maxcp);
            }else{
                flipL(maxlp);
            }
        }
    }while(pp);
    int sum=0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            sum+=a[i][j];
        }
    out<<sum<<"\n";
    return 0;
}