Cod sursa(job #2017542)

Utilizator vladr7ricean vlad vladr7 Data 1 septembrie 2017 16:44:21
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 kb
#include <iostream>
#include <fstream>

/*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.

Cerinta
Dandu-se o configuratie pentru tabla "Flip", realizati un program care sa determine suma maxima pe care Gigel o poate obtine.

Date de Intrare
Prima linie a fisierului flip.in contine doua numere intregi N si M, separate prin cate un spatiu, care reprezinta dimensiunea tablei. Urmatoarele N linii contin cate M numere intregi seperate prin cate un spatiu care descriu configuratia tablei de joc.

Date de Iesire
Prima linie a fisierului flip.out contine un numar care va reprezenta suma maxima pe care Gigel o poate obtine comutand liniile si coloanele tablei de joc.

Restrictii si precizari
1 ≤ N, M ≤ 16
Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]
Exemplu
flip.in	flip.out
5 3
4 -2 2
3 -1 5
2 0 -3
4 1 -3
5 -3 2
28
Explicatie
Se comuta coloana a doua si linia a treia. */

using namespace std;

int main()
{
    int a[100][100],n,m,i,j,x,com=-1,s1,s2,suma=0;

    ifstream fin("flip.in");
    ofstream fout("flip.out");

    fin>>n;
    fin>>m;

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            {
                fin>>x;
                a[i][j]=x;
            }



    for(i=1;i<=m;i++)
        {
            s1=s2=0;

            for(j=1;j<=n;j++)
                {
                    s1=s1+a[j][i];
                    s2=s2+a[j][i]*com;
                }

             if(s2>s1)
                for(j=1;j<=n;j++)
                    a[j][i]=a[j][i]*com;
        }

        for(i=1;i<=n;i++)
        {
            s1=s2=0;

            for(j=1;j<=m;j++)
                {
                    s1=s1+a[i][j];
                    s2=s2+a[i][j]*com;
                }

            if(s2>s1)
                for(j=1;j<=m;j++)
                    {
                        a[i][j]=a[i][j]*com;
                        suma=suma+a[i][j];
                    }
            else
                for(j=1;j<=m;j++)
                    suma=suma+a[i][j];
        }

fout<<suma;

    return 0;
}