Pagini recente » Monitorul de evaluare | Cod sursa (job #8509) | Cod sursa (job #1941818) | Cod sursa (job #2741698) | Cod sursa (job #78884)
Cod sursa(job #78884)
/*******************************************************************************
Problema : Jocul Flip
Website : InfoArena
Rezolvitor : Dr.Optix
Enunt:
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]
*******************************************************************************/
//includ fisierele necesare
#include <fstream.h>
//main() -- functia principala
int main()
{
//deschid fisierele
ifstream fin("flip.in"); ofstream fout("flip.out");
//declar variabilele necesare
long mat[20][20],n,m,s1,s2,s;
int i,j;
//citesc datele
fin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fin>>mat[i][j];
//fac ce mi se cere
for(j=0;j<m;j++)
{
s1=s2=0;
for(i=0;i<n;i++)
{
s1+=mat[i][j]; s2+=-mat[i][j];
}
if(s1<s2)
for(i=0;i<n;i++)
mat[i][j]=-mat[i][j];
}
for(i=0;i<n;i++)
{
s1=s2=0;
for(j=0;j<m;j++)
{
s1+=mat[i][j]; s2+=-mat[i][j];
}
if(s1<s2)
for(j=0;j<m;j++)
mat[i][j]=-mat[i][j];
}
s=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s+=mat[i][j];
/*/test scriu matricea obtinuta
fout<<n<<" "<<m<<"\n";
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
fout<<mat[i][j]<<" ";
fout<<"\n";
}*/
//scriu rezultatul
fout<<s;
//inchid fisierele
fin.close(); fout.close();
return 0;
}