Cod sursa(job #1012105)

Utilizator likesebiiiIonita Mihai Sebastian likesebiii Data 18 octombrie 2013 08:53:06
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.69 kb
/*

Jocul Flip2

Sebi a descoperit un nou joc pe care l-a numit "Flip2". 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 coloana si pe rand ) pe care Gigel o poate obtine. |

Date de Intrare :

Prima linie a fisierului flip2.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 existenta pe un rand , un spatiu , si suma maxima pe o coloana .

---------------------------------------------------------------------------------------------------------------------------
Restrictii si precizari

    1 ≤ N, M ≤ 16
    Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]

---------------------------------------------------------------------------------------------------------------------------

*/


#include <iostream>
#include <fstream>

using namespace std;
ifstream F("flip.in") ;
ofstream O("flip.out");

int main()
{
    int i , x , z , M , N ;
    long long int  SR[10000] , SR2[10000] , SC[10000] , SC2[10000] , Numar[10000] , limita = 0 , limita2 = 0 ;
    F >> M >> N ;
    for ( i = 1 ; i <= M*N ; i++ ) F >> Numar[i] ;
      for ( i = 1 ; i <= M*N ; i++ )
      {
          SC[i] = 0 ;
          SC2[i] = 0 ;
          SR[i] = 0 ;
          SR2[i] = 0 ;
      }
     x = 1 ;
    i = 1 ;
    z = 0 ;
    while ( i <= M*N )
    {
        if ( z % N == 0 ) x++ ;
        SR[x] += Numar[i]  ;
        SR2[x] += Numar[i] * (-1) ;
        if ( SR[x] > limita ) limita = SR[x] ;
        if ( SR2[x] > limita ) limita = SR2[x] ;
        z++ ;
        i++ ;
    }
    i = 0 ;
    x = 1 ;
    z = 0 ;
    while ( x <= N )
    {
        SC[x] += Numar[x+i*N] ;
        SC2[x] += Numar[x+i*N] * (-1) ;
        if ( SC[x] > limita2) limita2 = SC[x] ;
        if ( SC2[x] > limita ) limita2 = SC2[x] ;
          z ++;
          i++;
        if ( z % M == 0 && z != 0  )
        {
          x++ ;
          i = 0 ;
          z = 0 ;
        }

    }
    O << limita << " " << limita2 ;
    return 0 ;
}