Cod sursa(job #2104554)

Utilizator KENadianDragan Alex KENadian Data 11 ianuarie 2018 20:12:43
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream f ("flip.in");
ofstream g ("flip.out");

int suma_mat(int a[][100], int n, int m)
{
  int s = 0;
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      s += a[i][j];
  return s;
}

void invert(int a[][100], int n, int m, char c){
  if (c == 'l')
    for(int j = 0; j < m; ++j)
      a[n][j] = -a[n][j];
  else
    for(int i = 0; i < n; ++i)
      a[i][m] = -a[i][m];
}

int suma(int a[][100], int n, int m, char c)
{
  int s = 0;
  if (c == 'l')
    for(int j = 0; j < m; ++j){
      s += a[n][j];
    }
  else if (c == 'c')
    for(int i = 0; i < n; ++i){
      s += a[i][m];
    }
  cout << s <<'\n';
  return s;
}

void backtracking(int a[][100], int n, int m, bool neg){

  for(int i = 0; i < n; ++i)
    if (suma(a, i, m, 'l') < 0) {
      invert(a, i, m, 'l');
      neg = true;
    }
  for(int j = 0; j < m; ++j){
    if (suma(a, n, j, 'c') < 0){
      invert(a, n, j, 'c');
      neg = true;
      }
    }
  if(neg)
    backtracking(a, n, m, false);
}

int main()
{
  int a[100][100], n, m, smax;
  f >> n >> m;
  for(int i = 0; i < n; ++i)
    for(int j = 0; j < m; ++j)
      f >> a[i][j];

  backtracking(a, n, m, false);

  smax = suma_mat(a, n, m);

  g<<smax;
  f.close();
  g.close();
  return 0;
}