Cod sursa(job #2325886)

Utilizator rares.amarandeiRares Amarandei rares.amarandei Data 23 ianuarie 2019 01:59:40
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdlib.h>
#include <stdint.h>
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
#include <memory>
#include <algorithm>
#include <deque>
#include <iterator>
#include <numeric>
#include <assert.h>
#include <cstdlib>
#include <sstream>
#include <fstream>

#define INPUT_PATH ""
#define OUTPUT_PATH ""

void algorithm();

int main()
{
  algorithm();
  return 0;
}
using namespace std;

namespace
{
  struct Matrix
  {
    int rows;
    int cols;
    vector<int> matrix;
  };

  void solve(
    const int colNr, 
    const Matrix& m, 
    int& solution,
    vector<int> colSign)
  {
    if (colNr == m.cols)
    {
      int sum = 0;
      for (int row = 0; row < m.rows; ++row)
      {
        int sumRow = 0;
        for (int col = 0; col < m.cols; ++col)
          sumRow += colSign[col]*m.matrix[row*m.cols+col];
        sum += abs(sumRow);
      }
      solution = max(sum, solution);
    } 
    else
    {
      colSign[colNr] = 1; 
      solve(colNr + 1, m, solution, colSign);
      colSign[colNr] = -1; 
      solve(colNr + 1, m, solution, colSign);
    }
  }
}

////////////////////////////////////////////////////////////////////////////////
void algorithm()
{
  ifstream inputFile(INPUT_PATH "flip.in");
  ofstream outputFile(OUTPUT_PATH "flip.out");

  Matrix m;

  inputFile >> m.rows;
  inputFile >> m.cols;
  m.matrix.reserve(m.rows*m.cols);
  int readVal = 0;
  while (inputFile >> readVal)
  {
    m.matrix.push_back(readVal);
  }
  
  int solution = 0;
  vector<int> colSign(m.cols, 1);
  solve(0, m, solution, colSign);

  outputFile << solution;
  inputFile.close();
  outputFile.close();
}