Cod sursa(job #22691)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 27 februarie 2007 09:01:14
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<iostream>
#include<math.h>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");

void salvare(long long (*aux)[20],long long (*a)[20],int n,m)
{
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
      aux[i][j]=a[i][j];
}

void restaurare(long long(*a)[20],long long (*aux)[20],n,m)
{
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
      a[i][j]=aux[i][j];
}

int main()
{long long a[20][20],SumaInitiala=0,SumaFinala=0,aux[20][20];
int n,m;
fin>>n>>m;

for(int i=1;i<=n;i++)           //aici fac citirea
  for(int j=1;j<=n;j++)
    {fin>>a[i][j];SumaInitiala+=a[i][j];}
salvare(aux,a,n,m);

for(int i=1;i<=n;i++)           //pe linii
  {
  long long SumaPoz=0,SumaNeg=0;
    for(int j=1;j<=m;j++)
      {
      if(a[i][j]<0)
        SumaNeg+=abs(a[i][j]);
      else
        SumaPoz+=a[i][j];
      }
      if(SumaPoz<SumaNeg)
        {for(int j=1;j<=n;j++)
          a[i][j]*=-1;
        SumaInitiala+=2*(SumaNeg-SumaPoz);}
  }

for(int j=1;j<=m;j++)                   //pe coloane
  {
  long long SumaPoz=0,SumaNeg=0;
    for(int i=1;i<=n;i++)
      {if(a[i][j]<0)
        SumaNeg+=abs(a[i][j]);
      else
        SumaPoz+=a[i][j];
      }
      if(SumaPoz<SumaNeg)
      {
        for(int i=1;i<=n;i++)
          a[i][j]*=-1;
       SumaInitiala+=2*(SumaNeg-SumaPoz);
      }
  }

restaurare(a,aux,n,m);

for(int j=1;j<=m;j++)                   //pe coloane
  {
  long long SumaPoz=0,SumaNeg=0;
    for(int i=1;i<=n;i++)
      {if(a[i][j]<0)
        SumaNeg+=abs(a[i][j]);
      else
        SumaPoz+=a[i][j];
      }
      if(SumaPoz<SumaNeg)
      {
        for(int i=1;i<=n;i++)
          a[i][j]*=-1;
       SumaFinala+=2*(SumaNeg-SumaPoz);
      }
  }

for(int i=1;i<=n;i++)           //pe linii
  {
  long long SumaPoz=0,SumaNeg=0;
    for(int j=1;j<=m;j++)
      {
      if(a[i][j]<0)
        SumaNeg+=abs(a[i][j]);
      else
        SumaPoz+=a[i][j];
      }
      if(SumaPoz<SumaNeg)
        {for(int j=1;j<=n;j++)
          a[i][j]*=-1;
        SumaFinala+=2*(SumaNeg-SumaPoz);}
  }
if(SumaFinala>=SumaInitiala)
  fout<<SumaFinala;
else	
  fout<<SumaInitiala;
return 0;
}