Cod sursa(job #903191)
#include <iostream>
#include <fstream>
using namespace std;
ifstream ka("flip.in");
ofstream ki("flip.out");
int n,m,a[17][17],k;
long long s,ss,maxim[34];
bool maxime[34];
bool gasit;
int main()
{
ka>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ka>>a[i][j];
gasit=true;
while(gasit)
{
gasit=false;
k=0;
for(int i=1;i<=n;i++)
{
s=0;ss=0;
for(int j=1;j<=m;j++)
{
if(a[i][j]>0)
s+=a[i][j];
else
ss+=-a[i][j];
}
if(ss>s)
{
gasit=true;
maxim[i]=ss;
}
}
for(int j=1;j<=m;j++)
{
s=0;ss=0;
for(int i=1;i<=n;i++)
{
if(a[i][j]>0)
s+=a[i][j];
else
ss+=-a[i][j];
}
if(ss>s)
{
gasit=true;
maxim[17+j]=ss;
maxime[17+j]=1;
}
}
if(gasit)
{
int maximm=0,poz=0;
for(int f=1;f<=34;f++)
if(maxim[f]>maximm)
{
maximm=maxim[f];
poz=f;}
if(maxime[poz]==0)
{for(int j=1;j<=m;j++)
a[poz][j]=-a[poz][j];}
else
{for(int j=1;j<=n;j++)
a[j][poz-17]=-a[j][poz-17];}
for(int g=1;g<=34;g++)
{
maxim[g]=0;
maxime[g]=0;
}
gasit=true;
}
}
s=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
s+=a[i][j];
ki<<s;
}