Cod sursa(job #1092177)

Utilizator dana.jebeleanDana Jebelean dana.jebelean Data 26 ianuarie 2014 17:45:22
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 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 c, int l)
{
    int i;
        for(i = 0; i < n; i++)
        {
            t[i][c] = -t[i][c];
            t[l][c] = -t[l][c];
        }
}

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++)
    {
        for(j = 0; j < m; j++)
        {
            comutaLinie(t, n, m, i);
            comutaColoana(t, n, m, j, i);
            scurenta = suma(t, n, m);
            if(scurenta > smax)
                smax = scurenta;
            comutaColoana(t, n, m, j, i);
        }
        comutaLinie(t, n, m, i);
    }
    g << smax;
    f.close();
    g.close();
    return 0;

}