Cod sursa(job #1456762)

Utilizator dobre.alexandru95Dobre Andrei-Alexandru dobre.alexandru95 Data 1 iulie 2015 20:27:12
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>

int main()
{
  std::ifstream in("flip.in");
  std::ofstream out("flip.out");

  int n;
  int m;
  in>>n>>m;
  int a[n][m];

  int sum_pozitives;
  int sum_negatives;
  int sum = 0;

  for(int ln=0;ln<n;++ln)
  /// Citim tabloul bidimensional din fisier si determinam liniile asupra carora
  /// se poate aplica metoda 'flip'.
  {
    sum_pozitives = sum_negatives = 0;
    for(int col=0;col<m;++col)
    /// Pe masura ce se citesc elementele liniei curente, insumam
    /// numerele negative si numerele pozitive.
    {
      in>>a[ln][col];

      if(a[ln][col] < 0) sum_negatives += a[ln][col];
      else sum_pozitives += a[ln][col];
    }
    /// Dupa citirea liniei, determinam daca este avantajos sa operam 'flip'
    /// asupra liniei curente (i.e.: daca modulul sumei numerelor negative este
    /// mai mare decat suma numerelor pozitive).
    if(sum_pozitives < (-1 * sum_negatives))
    {
      for(int col=0;col<m;++col)
      {
        a[ln][col] *= -1;
      }
    }
  }

  for(int col=0;col<m;++col)
  /// Determinam coloanele asupra carora se poate aplica metoda ;flip; si
  /// calculam suma elementelor.
  {
    sum_pozitives = sum_negatives = 0;

    for(int ln=0;ln<n;++ln)
    /// Pe masura ce se parcurg elementele coloanei curente, insumam
    /// numerele negative si numerele pozitive.
    {
      if(a[ln][col] < 0) sum_negatives += a[ln][col];
      else sum_pozitives += a[ln][col];
    }

    if(sum_pozitives < (-1 * sum_negatives))
    /// Dupa parcurgerea coloanei determinam daca este avantajos sa operam 'flip'
    /// asupra ei curente (i.e.: daca modulul sumei numerelor negative este
    /// mai mare decat suma numerelor pozitive).
    {
      for(int ln=0;ln<n;++ln)
      {
        a[ln][col] *= -1;
      }
    }

    for(int ln=0;ln<n;++ln)
    /// Calculam suma elementelor
    {
      sum += a[ln][col];
    }
  }

  out<<sum;

  in.close();
  out.close();
  return 0;
}