Cod sursa(job #788907)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 16 septembrie 2012 08:07:06
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std;

inline void flip(vector< vector<int> > &tabla, unsigned int code);

int main(){
    ifstream fin("flip.in");
    ofstream fout("flip.out");

    int n,m;
    int max_sum=0;
    fin>>n>>m;
    vector< vector<int> > tabla(n,vector<int>(m));
    for(int i=0;i<n;++i) for(int j=0;j<m;++j){ fin>>tabla[i][j]; max_sum+=tabla[i][j]; }

    vector<bool> setari(m,false);
    vector<bool> considered(m,false);

    int ks=0;
    while(ks>-1){
        if(!considered[ks]) considered[ks]=true;
        else if(!setari[ks]){ setari[ks]=true; flip(tabla,ks); }
        else{ setari[ks]=false; considered[ks]=false; flip(tabla,ks); ks--; continue; }

        if(ks==m-1){
            int curr_sum=0;
            for(int i=0;i<n;++i){
                int line_sum=0;
                for(int j=0;j<m;++j) line_sum+=tabla[i][j];
                curr_sum+=abs(line_sum);
            }

            if(curr_sum>max_sum) max_sum=curr_sum;
        }
        else ++ks;
    }
    fout<<max_sum<<'\n';
}

inline void flip(vector< vector<int> > &tabla, unsigned int code){
    for(unsigned i=0;i<tabla.size();++i) tabla[i][code]=-tabla[i][code];
}