Cod sursa(job #19254)

Utilizator magicMaria Ionescu magic Data 19 februarie 2007 00:30:24
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<iostream>
#include<fstream>

using namespace std;

#define inputfile "flip.in"
#define outputfile "flip.out"

const int NMAX = 16;

void ReadData(int a[NMAX][NMAX], int &N, int&M, int c[NMAX], int l[NMAX]) {
  ifstream in(inputfile);
  in>>N>>M; 
  for (int i = 1; i<=N; i++) l[i] = 0;
  for (int j = 1; j<=M; j++) c[j] = 0;

  for (int i = 1; i<=N; i++)
    for (int j = 1; j<=M; j++) {
      in>>a[i][j];
      l[i] += a[i][j];
      c[j] += a[i][j];
    }
  in.close();
}

int Solve(int a[NMAX][NMAX], int N, int M, int c[NMAX], int l[NMAX]) {
  int suma = 0;
  for (int i = 1; i<=N; i++) suma += l[i];
  for (int i = 1; i<=N; i++)
    if (l[i]<0) {
      for (int j = 1; j<= M; j++) {
	a[i][j] *= (-1);
	c[j] += 2*a[i][j];
      }
      l[i] *= (-1);
      suma += 2*l[i];
    }
  for (int j = 1; j<=M; j++)
    if (c[j]<0) {
      for (int i = 1; i<= N; i++) {
	a[i][j] *= (-1);
	l[i] += 2*a[i][j];
      }
      c[j] *= (-1);
      suma += 2*c[j];
    }
  return suma;
}

int main() {
  int a[NMAX][NMAX];
  int c[NMAX],l[NMAX];
  int N,M;
  ReadData(a,N,M,c,l);

  ofstream to(outputfile);
  to<<Solve(a,N,M,c,l);
  for (int i = 1; i<=N; i++) {
    for (int j = 1; j<=M; j++)
      cout<<a[i][j]<<' ';
    cout<<'\n';
  }
}