Pagini recente » Cod sursa (job #2238872) | Cod sursa (job #899495) | Cod sursa (job #1096548) | Cod sursa (job #191242) | Cod sursa (job #1012105)
/*
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 ;
}