Cod sursa(job #2404683)

Utilizator pslaPislariu Alexandru psla Data 13 aprilie 2019 11:39:39
Problema Jocul Flip Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#define Nmax 16
using namespace std;
/*Vectori caracterstici
SL[i] -> suma de pe linia i
SC[i] -> suma de pe coloana i
*/
int SL[Nmax],SC[Nmax];

void citire(int &n,int &m,int a[][Nmax])
{ifstream in("flip.in");
    in>>n>>m;

/*In functie construim si vectorii caracteristici */
    for(int l=0; l<n; l++)
        for(int c=0; c<m; c++)
        {
            in>>a[l][c];

            SL[l]+=a[l][c];
            SC[c]+=a[l][c];
        }
in.close();
}

void inversare(int n,int m,int a[][Nmax])
{/*O linie sau o coloana se inverseaza <=> suma sa este negativa */
    for(int l=0; l<n; l++)
        if(SL[l]<0)
        {/*actualizam sumele coloanelor */
            for(int c=0; c<m; c++)
            {
                a[l][c]=-a[l][c];
                SC[c]+=a[l][c];
            }

            SL[l]=-SL[l];
        }

    for(int c=0; c<m; c++)
        if(SC[c]<0)
        {/*actualizam sumele liniilor */
            for(int l=0; l<n; l++)
            {
                a[l][c]=-a[l][c];
                SL[l]+=a[l][c];
            }

            SC[c]=-SC[c];
        }
}

int sumaMaxima(int n,int m,int a[][Nmax])
{
    inversare(n,m,a);

/*calculam suma matricei dupa inversare */
    int S=0;
    for(int l=0; l<n; l++)
        for(int c=0; c<m; c++)
            S+=a[l][c];

    return S;
}

int main()
{
    int n,m;/*dimensiunile matricei */
    int a[Nmax][Nmax];
    citire(n,m,a);

ofstream out("flip.out");
    out<<sumaMaxima(n,m,a)<<'\n';
out.close();

    return 0;
}