Cod sursa(job #2331060)

Utilizator andrei5000Andrei Alin andrei5000 Data 29 ianuarie 2019 09:47:11
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>

using namespace std;

ifstream f("flip.in");
ofstream g("flip.out");
int M[16][16],cp[16],cn[16],lp[16],ln[16],ok=1,aux,n,m,i,j,S;

void afis() {
    for(int a=0;a<n;++a){
      for(int b=0;b<m;++b)
        g << M[a][b] << " ";
    g << "\n";}
    g << "\n";
}

int main()
{
    f >> n >> m;

    for(i=0;i<n;++i)
       for(j=0;j<m;++j){
         f >> M[i][j];
         if(M[i][j]>=0){
            lp[i] += M[i][j];
            cp[j] += M[i][j];
         }
         else{
            ln[i] += M[i][j];
            cn[j] += M[i][j];
         }}

    while(ok){ok = 0;
        for(i=0;i<n;++i)
          if(-1*ln[i]>lp[i]){
            ok = 1;
            aux = -1 * ln[i];
            ln[i] = -1 * lp[i];
            lp[i] = aux;
            for(j=0;j<m;++j){
                M[i][j] *= -1;
                cn[j] += M[i][j];
                cp[j] += M[i][j];
        }
      }

      for(j=0;j<m;++j)
          if(-1*cn[j]>cp[j]){
            ok = 1;
            aux = -1 * cn[j];
            cn[j] = -1 * cp[j];
            cp[j] = aux;
            for(i=0;i<n;++i){
                M[i][j] *= -1;
                ln[i] += M[i][j];
                lp[i] += M[i][j];

    }}}

    for(i=0;i<n;++i)
       for(j=0;j<m;++j)
        S += M[i][j];


    g << S;

    return 0;
}