Cod sursa(job #2587311)

Utilizator armand1Armand B armand1 Data 22 martie 2020 17:09:08
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>
using namespace std;

int flip[16][16];
int N, M;

int sumRow(int i)
{
    int s = 0;
    for (int j = 0; j < M; j++)
        s += flip[i][j];
    return s;
}

int sumCol(int j)
{
    int s = 0;
    for (int i = 0; i < N; i++)
        s += flip[i][j];
    return s;
}

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

    //istream &in = cin;
    //ostream &out = cout;

    int S = 0;
    in >> N >> M;
    for (int i = 0;i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            in >> flip[i][j];
            S += flip[i][j];
        }
    }
    while (true)
    {
        int irm = 0, icm = 0;
        int srm = sumRow(0), scm = sumCol(0);
        for (int i = 1; i < N; i++)
        {
            int sr = sumRow(i);
            if (sr < srm)
            {
                srm = sr;
                irm = i;
            }
        }
        for (int j = 1; j < M; j++)
        {
            int sc = sumCol(j);
            if (sc < scm)
            {
                scm = sc;
                icm = j;
            }
        }
        if (srm < scm)
        {
            if (srm >= 0)
                break;
            for (int j = 0; j < M; j++)
                flip[irm][j] = -flip[irm][j];
            S -= 2 * srm;
        }
        else
        {
            if (scm >= 0)
                break;
            for (int i = 0; i < N; i++)
                flip[i][icm] = -flip[i][icm];
            S -= 2 * scm;
        }
    }
    out << S;
}