Cod sursa(job #1092120)

Utilizator dana.jebeleanDana Jebelean dana.jebelean Data 26 ianuarie 2014 16:33:33
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
/**
Gigel a descoperit un nou joc pe care l-a numit "Flip".
Acesta se joaca pe o tabla dreptunghiulara de dimensiuni N*M care contine
numere intregi. Fiecare linie si fiecare coloana are un comutator care
schimba starea tuturor elementelor de pe acea linie sau coloana,
inmultindu-le cu -1. Scopul jocului este ca pentru o configuratie
data a tablei de joc sa se actioneze asupra liniilor si coloanelor
astfel incat sa se obtina o tabla cu suma elementelor cat mai mare.
**/

#include <iostream>
#include <fstream>

#define dMAX 16

using namespace std;

int suma(int t[][dMAX], int n, int m)
{
    int i, j, s = 0;
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
          s += t[i][j];
    return s;
}

void comutaLinie(int t[][dMAX], int n, int m, int k)
{
    int j;
        for(j = 0; j < m; j++)
            t[k][j] = -t[k][j];
}

void comutaColoana(int t[][dMAX], int n, int m, int k)
{
    int i;
        for(i = 0; i < n; i++)
            t[i][k] = -t[i][k];
}

void afisare(int t[][dMAX], int n, int m)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            cout << t[i][j] << "  ";
        cout << "\n";
    }
}

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

    int n, m, i, j, t[dMAX][dMAX], smax, scurenta;
    f >> n; f >> m;
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
           f >> t[i][j];

    smax = suma(t, n, m);
    for(i = 0; i < n; i++)
    {
        comutaLinie(t, n, m, i);
        for(j = 0; j < m; j++)
        {
            comutaColoana(t, n, m, j);
            scurenta = suma (t, n, m);
            if(smax < scurenta)
                smax = scurenta;
            comutaColoana(t, n, m, j);
        }
        comutaLinie(t, n, m, i);
    }
    g << smax;
    f.close();
    g.close();
    return 0;

}