#include <stdio.h>
#include <stdlib.h>
int** read_data(char* file_name, int* lines, int* columns)
{
FILE* in_txt = fopen(file_name, "r");
fscanf(in_txt, "%d%d", lines, columns);
int** matrix = (int**) malloc( (*lines) * sizeof(int*) );
int i, j;
for(i = 0; i < *lines; i++)
{
matrix[i] = (int*) malloc( (*columns) * sizeof(int) );
for(j = 0; j < *columns; j++)
fscanf(in_txt, "%d", &matrix[i][j]);
}
fclose(in_txt);
return matrix;
}
void print_matrix(int** matrix, int lines, int columns)
{
int i, j;
for(i = 0; i < lines; i++)
{
for(j = 0; j < columns; j++)
printf("%d ", matrix[i][j]);
printf("\n");
}
}
void flip_row(int** matrix, int columns, int row, int col_index)
{
if (col_index == columns)
return;
matrix[row][col_index] = (-matrix[row][col_index]);
flip_row(matrix, columns, row, col_index + 1);
}
void flip_column(int** matrix, int lines, int column, int row_index)
{
if (row_index == lines)
return;
matrix[row_index][column] = (-matrix[row_index][column]);
flip_column(matrix, lines, column, row_index + 1);
}
int sum_row(int** matrix, int columns, int row, int col_index)
{
if (col_index == columns)
return 0;
return matrix[row][col_index] + sum_row(matrix, columns, row, col_index + 1);
}
int sum_column(int** matrix, int lines, int column, int row_index)
{
if (row_index == lines)
return 0;
return matrix[row_index][column] + sum_column(matrix, lines, column, row_index + 1);
}
int sum_matrix(int** matrix, int lines, int columns, int row_index, int col_index)
{
if (row_index == lines)
return 0;
if (col_index == columns)
return sum_matrix(matrix, lines, columns, row_index + 1, 0);
return matrix[row_index][col_index] + sum_matrix(matrix, lines, columns, row_index, col_index + 1);
}
int main()
{
int n, m, sum = 0;
int** matrix = read_data("flip.in", &n, &m);
int i;
for(i = 0; i < n; i++)
if (sum_row(matrix, m, i, 0) < 0)
flip_row(matrix, m, i, 0);
for(i = 0; i < m; i++)
if (sum_column(matrix, n, i, 0) < 0)
flip_column(matrix, n, i, 0);
sum = sum_matrix(matrix, n, m, 0, 0);
FILE* out_txt = fopen("flip.out", "w");
fprintf(out_txt, "%d\n", sum);
fclose(out_txt);
return 0;
}