Cod sursa(job #2462856)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 27 septembrie 2019 22:04:38
Problema Jocul Flip Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.67 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
#define MAX_SIZE 17
int n, m, i, j, k, nextline, nextcolumn, summin, index, done, suma, lastline = -1, lastcolumn = -1;
int table[MAX_SIZE][MAX_SIZE];
int sumlin[MAX_SIZE];
int sumcol[MAX_SIZE];
bool samelines = false, samecolumns = false;

int SearchLine() {
    summin = sumlin[1];
    for(i = 2; i <= n; i++) {
        if(sumlin[i] < summin) {
            summin = sumlin[i];
            index = i;
        }
    }
    if(summin < 0)
        return index;
    return -1;
}

int SearchColumn() {
    summin = sumcol[1];
    for(j = 2; j <= m; j++) {
        if(sumcol[j] < summin) {
            summin = sumcol[j];
            index = j;
        }
    }
    if(summin < 0)
        return index;
    return -1;
}

void ChangeLine(int nextline) {
    sumlin[nextline] = -sumlin[nextline];
    for(j = 1; j <= m; j++) {
        table[nextline][j] = -table[nextline][j];
        sumcol[j] += 2*table[nextline][j];
    }
}

void ChangeColumn(int nextcolumn) {
    sumcol[nextcolumn] = -sumcol[nextcolumn];
    for(i = 1; i <= n; i++) {
        table[i][nextcolumn] = -table[i][nextcolumn];
        sumlin[i] += 2*table[i][nextcolumn];
    }
}

int main()
{
    f >> n >> m;
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= m; j++) {
            f >> table[i][j];
            sumlin[i] += table[i][j];
            sumcol[j] += table[i][j];
        }
    }

    while(done != 2) {
        done++;
        if(nextcolumn == lastcolumn) {
            if(nextline == lastline) {
                break;
            }
        }

        if(k % 2 == 0) {
            lastline = nextline;
            nextline = SearchLine();
            if(nextline != -1) {
                done = 0;
                ChangeLine(nextline);
                if(lastline == nextline)
                    samelines = true;
                else samelines = false;
            }
        } else {
            lastcolumn = nextcolumn;
            nextcolumn = SearchColumn();
            if(nextcolumn != -1) {
                done = 0;
                ChangeColumn(nextcolumn);
                if(lastline == nextline)
                    samecolumns = true;
                else samecolumns = false;
            }
        }
        if(samelines)
            if(samecolumns)
                done = 2;
        k++;
    }

    for(i = 1; i <= n ;i++) {
        for(j = 1; j <= m; j++)
            cout << table[i][j] << ' ';
        cout << '\n';
    }

    for(i = 1; i <= n; i++) {
        suma += sumlin[i];
    }

    g << suma;
    return 0;
}