Cod sursa(job #1335740)

Utilizator victor-cristianvictor-cristian victor-cristian Data 5 februarie 2015 20:39:26
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
// adresa:        http://www.infoarena.ro/problema/flip
//deci jocul de flip: ai un tabel cu valori definit pe m randuri si n coloane
//valorile de pe fiecare rand si de pe fiecare coloana pot fi inmultite cu -1
// cu scopul de a obtine cea mai mare suma posibila a tabelului si sa o afisam
int main()
{  //pentru a rezolva pb m-am gandit sa verificam  ce randuri si  ce coloane vom inmulti cu -1 si care cu 1
// si sa pastram valuarea intr-un vector astfel ca la final fiecare valuare din tabel va fi inmultita cu vectorii corespunzatori
    // randului si coloanei din care fac parte si abia apoi adunati intr-o suma finala
    int n,m , v[16][16], r[16], c[16], i, e, s, sn, smax,a ;
    a=-1;
    f>>n>>m; //citim n si m
    //vom citi valorile din tabel folosind o matrice:
    for(i=1; i<=m; i++)
    {
        s=0; //initializam o suma pentru valorile dintr-un rand
        for(e=1; e<=n; e++)
        {
            f>> v[i][e] ;   // citim valorile din fisier
             s=s+v[i][e]; // si in acelasi timp adunam fiecare valuare de pe rand la suma
        }
        sn=a*s;  //vedem care este valuarea sumei negative
        //vedem daca randul va fi inmultit cu 1 sau cu -1 si pastram acest lucru intr-un vector
        if (s>sn)
                   r[e]=1;
        else
            r[e]=-1;
    }
    //am stabilit care randuri vor fi inmultite cu unu si care cu minus unu
    //acum vom stabili care coloane vor fi inmultite cu 1 si care cu -1
    //vom proceda ca in cazul randurilor doar ca de aceasta data nu vom mai citi valorile
    //si diferenta va fi ca  primul for va fi cu variabila e (pt ca acesta trebuie sa fie constant, el definind coloana )
    for(e=1; e<=n; e++)
    {
        s=0;
        for(i=1; i<=m; i++)
                    {
                        s=s+v[i][e]; //adunam vectorii din coloana la suma
                    }
        sn=a*s;
        if(s>sn)  c[i]=1;
        else c[i]=-1;
    }
    //pasul urmator consta in a calcula valuarea sumei maxime
    smax=0;
    for(i=1;i<=m; i++)
       {
           for(e=1; e<=n; e++)
            {
                v[i][e]=v[i][e]*r[e]*c[i];   //stabilim valuarea finala din casuta tabelului
                smax=smax+v[i][e];     //adunam valuarea la suma
            }
       }
    g<<smax;  //afisam suma
    f.close();
    g.close();
    return 0;
}