Cod sursa(job #1888468)

Utilizator raduamaistroaieRadu Amaistroaie raduamaistroaie Data 22 februarie 2017 09:33:38
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream intrare("flip.in");
ofstream iesire("flip.out");
int n, m, a[18][18], liniep[17], coloanap[17], linien[17], coloanan[17], suma;
void citire(int &n, int &m, int a[18][18])
{
    intrare>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            intrare>>a[i][j];
            if(a[i][j]>=0)
            {
                liniep[i]+=a[i][j];
                coloanap[j]+=a[i][j];
            }
            else
            {
                linien[i]-=a[i][j];
                coloanan[j]-=a[i][j];
            }
        }
}
void fliplinie(int i)
{
    for(int j=1; j<=m; j++)
        a[i][j]=-a[i][j];
}
void flipcoloana(int j)
{
    for(int i=1; i<=n; i++)
        a[i][j]=-a[i][j];
}
int main()
{
    citire(n,m,a);
    int ok1=1, ok2=1;
    while(ok1!=0 && ok2!=0)
    {
    for(int i=1; i<=n; i++)
    {
        if(max(liniep[i],linien[i])==linien[i])
        {
            ok1=1;
            int aux;
            aux=liniep[i];
            liniep[i]=linien[i];
            linien[i]=aux;
            fliplinie(i);
        }
        else
            if(i==n)
                ok1=0;
    }
    for(int j=1; j<=m; j++)
    {
        if(max(coloanap[j],coloanan[j])==coloanan[j])
        {
            ok2=1;
            int aux;
            aux=coloanap[j];
            coloanap[j]=coloanan[j];
            coloanan[j]=aux;
            flipcoloana(j);
        }
        else
            if(j==m)
                ok2=0;
    }
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            suma+=a[i][j];
    iesire<<suma;
    return 0;
}