Cod sursa(job #2221672)

Utilizator PredaBossPreda Andrei PredaBoss Data 15 iulie 2018 14:24:53
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;
int matrix[20][20],n,m,ans;
int line[20],column[20];
bitset<20>apLine,apColumn;
int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&matrix[i][j]);
            line[i]+=matrix[i][j];
            column[j]+=matrix[i][j];
        }
    bool ok=true;
    while(ok)
    {
        ok=false;
        for(int i=1;i<=n;i++)
        {
            if(apLine[i])
                continue;
            if(line[i]>=0)
                continue;
            apLine[i]=1;
            line[i]=abs(line[i]);
            for(int j=1;j<=m;j++)
            {
                column[j]-=2*matrix[i][j];
                matrix[i][j]=-matrix[i][j];
            }
            ok=true;
        }
        for(int i=1;i<=m;i++)
        {
            if(apColumn[i])
                continue;
            if(column[i]>=0)
                continue;
            apColumn[i]=1;
            column[i]=abs(column[i]);
            for(int j=1;j<=n;j++)
            {
                line[j]-=2*matrix[j][i];
                matrix[j][i]=-matrix[j][i];
            }
            ok=true;
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        ans+=matrix[i][j];
    cout<<ans;
    return 0;
}