Cod sursa(job #880881)

Utilizator rusuandreirobertAndrei-Robert Rusu rusuandreirobert Data 17 februarie 2013 14:33:45
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

fstream fin("flip.in", ios::in);
fstream fout("flip.out", ios::out);

int n,m,math[20][20], math_clean[20][20];

void switchCol(int col) {
    for(int i = 1; i<= m;i++)
        math[col][i] *= -1;
}

void checkCol(int col) {
    int sum = 0;
    for(int i = 1; i<= n;i++)
        sum += math[col][i];

    if(sum < 0)
        switchCol(col);
}

void switchLine(int line) {
    for(int i = 1; i<= n;i++)
        math[i][line] *= -1;
}

void checkLine(int line) {
    int sum = 0;
    for(int i = 1; i<= n;i++)
        sum += math[i][line];

    if(sum < 0)
        switchLine(line);
}

int main() {
    int max_val = 0, sum = 0;

    fin>>n>>m;
    for(int i = 1; i<= n; i++)
        for(int j = 1; j<= m; j++)
            fin>>math_clean[i][j];

    // Case One
        memcpy (math, math_clean, sizeof (math_clean));

        for(int i = 1; i <= n;i++)
            checkLine(i);
        for(int i = 1; i <= m;i++)
            checkCol(i);

        sum = 0;

        for(int i = 1; i<= n; i++)
            for(int j = 1; j<= m; j++)
                sum += math[i][j];

        max_val = max_val > sum ? max_val : sum;
    // Case Two
        memcpy (math, math_clean, sizeof (math_clean));

        for(int i = 1; i <= m;i++)
            checkCol(i);
        for(int i = 1; i <= n;i++)
            checkLine(i);

        sum = 0;

        for(int i = 1; i<= n; i++)
            for(int j = 1; j<= m; j++)
                sum += math[i][j];

        max_val = max_val > sum ? max_val : sum;

    fout<<max_val;

    return 0;
}