Cod sursa(job #1989426)

Utilizator Thunderback2Pop Coman Eric Thunderback2 Data 7 iunie 2017 11:58:40
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <fstream>

using namespace std;

struct matrice
{
    int lin;
    int col;
    int elem[16][16];
};

void citire(matrice &m)
{
    ifstream fin("flip.in");
    int i, j;
    fin >> m.lin >> m.col;
    for(i = 0; i < m.lin; i++)
        for(j = 0; j < m.col; j++)
            fin >> m.elem[i][j];
    fin.close();
}

void afisare(int n)
{
    ofstream fout("flip.out");
    fout << n;
    fout.close();
}

int suma_linie(matrice m, int x_lin)
{
    int i, s = 0;
    for(i = 0; i < m.col; i++)
        s = s + m.elem[x_lin][i];
    return s;
}

int suma_coloana(matrice m, int x_col)
{
    int i, s = 0;
    for(i = 0; i < m.lin; i++)
        s = s + m.elem[i][x_col];
    return s;
}

void flip_linie(matrice &m, int x_lin)
{
    int i;
    for(i = 0; i < m.col; i++)
        m.elem[x_lin][i] *= -1;
}

void flip_coloana(matrice &m, int x_col)
{
    int i;
    for(i = 0; i < m.lin; i++)
        m.elem[i][x_col] *= -1;
}

void transforma1(matrice &m)
{
    int i, s1, s2;
    for(i = 0; i < m.lin; i++)
    {
        s1 = suma_linie(m, i);
        flip_linie(m, i);
        s2 = suma_linie(m, i);
        if(s1 > s2)
            flip_linie(m, i);
    }
    for(i = 0; i < m.col; i++)
    {
        s1 = suma_coloana(m, i);
        flip_coloana(m, i);
        s2 = suma_coloana(m, i);
        if(s1 > s2)
            flip_coloana(m, i);
    }
}

void transforma2(matrice &m)
{
    int i, s1, s2;
    for(i = 0; i < m.col; i++)
    {
        s1 = suma_coloana(m, i);
        flip_coloana(m, i);
        s2 = suma_coloana(m, i);
        if(s1 > s2)
            flip_coloana(m, i);
    }
    for(i = 0; i < m.lin; i++)
    {
        s1 = suma_linie(m, i);
        flip_linie(m, i);
        s2 = suma_linie(m, i);
        if(s1 > s2)
            flip_linie(m, i);
    }
}

int suma_total(matrice m)
{
    int i, j, s = 0;
    for(i = 0; i < m.lin; i++)
        for(j = 0; j < m.col; j++)
            s = s + m.elem[i][j];
    return s;
}

int main()
{
    int s;
    matrice m;
    citire(m);
    transforma1(m);
    transforma2(m);
    s = suma_total(m);
    afisare(s);
    return 0;
}