Cod sursa(job #1858135)

Utilizator birotxNedelcescu Radu Costin birotx Data 27 ianuarie 2017 01:47:29
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

ifstream f("flip.in");
ofstream g("flip.out");


class flipClass{
    private:
        int n,m,perm, perv_v[33],cont;
        long long matrix[17][17];
        long long maxi;
    public:
        flipClass(){
            perm=0;
            cont = 1;
            maxi = 0;
        }
    void read(){
        f>>m;
        f>>n;

        for(int i=1;i<=m;i++)
        {
            for(int j=1; j<=n; j++)
            {
                f>>matrix[i][j];
            }
        }
    }
    void show(){
        for(int i=1;i<=m;i++)
        {
            for(int j=1; j<=n; j++)
            {
                cout<<matrix[i][j]<<" ";
            }
            cout<<'\n';
        }
        cout<<'\n';
    }
    void toggle_line (int line)
    {
        matrix[line][0]=!matrix[line][0];
        cont=1;
    }
    void toggle_col (int col)
    {
        matrix[0][col]=!matrix[0][col];
        cont=1;
    }
    void do_p(){
        for(int i=1;i<=m;i++){
            if(sum_line(i)<0) toggle_line (i);
        }
        for(int i=1;i<=n;i++){
            if(sum_col(i)<0) toggle_col (i);
        }
    }
    long long sum_line(int line){
        long long sum=0;
            for(int i=1;i<=n;i++) sum += ((matrix[line][0]^matrix[0][i]) ?  matrix[line][i]*(-1) :  matrix[line][i]);
//cout<<(((matrix[line][0]^matrix[0][i]) ?  matrix[line][i]*(-1) :  matrix[line][i]))<<" ";}
        return sum;
    }
    long long sum_col(int col){
       long long sum=0;
            for(int i=1;i<=m;i++)
            sum += ((matrix[i][0]^matrix[0][col]) ? matrix[i][col]*(-1) :  matrix[i][col]) ;
            //cout<<(((matrix[i][0]^matrix[0][col]) ? matrix[i][col]*(-1) :  matrix[i][col]))<<" ";}
        return sum;
    }
    int one_more_time(){
        int cp = cont;
        cont = 0;
        return cp;
    }
    long final_sum(){
        long long fs=0;
        for(int i=1;i<=m;i++){
           fs += sum_line(i);
        }
        return fs;
    }
};

int main()
{

    flipClass flip;
    flip.read();
    //flip.show();

    while(flip.one_more_time())
    {
        flip.do_p();

    }
    g<<flip.final_sum();
}