Cod sursa(job #1425538)

Utilizator tuthCimpean Tudor tuth Data 27 aprilie 2015 17:04:57
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
//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.
using namespace std;
void citire(int &n,int &m,int x[100][100])
{
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            cin>>x[i][j];
}
void afisare(int n,int m,int x[100][100])
{
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            cout<<x[i][j]<<" ";
            cout<<endl;
    }
}
int suma_linie(int n,int m,int x[100][100],int i)
{
    int s=0;
        for(int j=1;j<=m;j++)
            s=s+x[i][j];
    return s;
}
int suma_coloana(int n,int m,int x[100][100],int i)
{
    int s=0;
    for(int j=1;j<=n;j++)
        s=s+x[j][i];
    return s;
}
void semn_linie(int n,int m,int a[100][100],int i)
{
    for(int j=1;j<=n;j++)
        a[i][j]=a[i][j]*(-1);
}
void semn_coloana(int n,int m,int x[100][100],int i)
{
    for(int j=1;j<=m;j++)
        x[j][i]=x[j][i]*(-1);
}
int construire(int n,int m,int x[100][100])
{
    int i,s=0;
    for(i=1;i<n;i++)
        if(suma_linie(n,m,x,i)<suma_linie(n,m,x,i)*(-1))
            semn_linie(n,m,x,i);
    for(i=1;i<=m;i++)
    if(suma_coloana(n,m,x,i)<suma_coloana(n,m,x,i)*(-1)){
        semn_coloana(n,m,x,i);
    }
    for(i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            s=s+x[i][j];
    return s;
}

int main()
{
    int n,m,x[100][100];
    citire(n,m,x);
    afisare(n,m,x);
    cout<<construire(n,m,x);
    return 0;
}