Cod sursa(job #2816771)

Utilizator medicinedoctoralexandru medicinedoctor Data 12 decembrie 2021 01:16:52
Problema Jocul Flip Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>

#define max(a, b) ((a) > (b) ? (a) : (b))

const char *inputFile = "./flip.in";
const char *outputFile = "./flip.out";

int rows, columns;
int *list;

#define indx(row, column) ((row) * (columns) + (column))

inline int rowSum(const int &row)
{
  int sum = 0;
  for (int column = 0; column < columns; column++)
    sum += list[indx(row, column)];
  return sum;
}

inline int toggledRowSum(const int &row)
{
  int sum = 0;
  for (int column = 0; column < columns; column++)
    sum += list[indx(row, column)] * -1;
  return sum;
}

inline int columnSum(const int &column)
{
  int sum = 0;
  for (int row = 0; row < rows; row++)
    sum += list[indx(row, column)];
  return sum;
}

inline int toggledColumnSum(const int &column)
{
  int sum = 0;
  for (int row = 0; row < rows; row++)
    sum += list[indx(row, column)] * -1;
  return sum;
}

inline int solveForRow()
{
  int sum = 0;
  for (int row = 0; row < rows; row++)
    sum += max(rowSum(row), toggledRowSum(row));

  return sum;
}

inline int solveForColumn()
{
  int sum = 0;
  for (int column = 0; column < columns; column++)
    sum += max(columnSum(column), toggledColumnSum(column));

  return sum;
}

inline int solve() { return max(solveForRow(), solveForColumn()); }

int main()
{
  // read  data in from
  std::ifstream input(inputFile);

  input >> rows >> columns;

  for (int index = 0; index < rows * columns; index++)
    input >> list[index];

  // write output data
  std::ofstream output(outputFile);
  output << solve() << std::endl;

  return 0;
}