Pagini recente » Cod sursa (job #2274954) | Cod sursa (job #972688) | Cod sursa (job #3142398) | Cod sursa (job #1980249) | Cod sursa (job #2857330)
#include <stdio.h>
#include <stdlib.h>
long long int sum_lin(int lin, int m, int **mat) {
long long int sum = 0;
for (int j = 0; j < m; j++)
sum += mat[lin][j];
return sum;
}
void comut_lin(int lin, int m, int **mat) {
for (int j = 0; j < m; j++)
mat[lin][j] *= -1;
}
long long int sum_col(int col, int n, int **mat) {
long long int sum = 0;
for (int i = 0; i < n; i++)
sum += mat[i][col];
return sum;
}
void comut_col(int col, int n, int **mat) {
for (int i = 0; i < n; i++)
mat[i][col] *= -1;
}
long long int sum_mat(int **mat, int n, int m) {
long long int sum = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
sum += mat[i][j];
return sum;
}
int main() {
FILE *in = fopen("flip.in", "rt");
FILE *out = fopen("flip.out", "wt");
// citire n, m si alocare dinamica matrice
int n, m;
fscanf(in, "%d%d", &n, &m);
int **mat = (int **) calloc(n, sizeof(int *));
for (int i = 0; i < n; i++)
mat[i] = (int *) calloc(m, sizeof(int));
// citire matrice
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
fscanf(in, "%d", &mat[i][j]);
// calcul maxim sume pe linii si coloane
// in functie de starea de comutare
for (int i = 0; i < n; i++) {
long long int sum = sum_lin(i, m, mat);
comut_lin(i, m, mat);
long long int sum_comut = sum_lin(i, m, mat);
if (sum > sum_comut)
comut_lin(i, m, mat);
}
for (int j = 0; j < m; j++) {
long long int sum = sum_col(j, n, mat);
comut_col(j, n, mat);
long long int sum_comut = sum_col(j, n, mat);
if (sum > sum_comut)
comut_col(j, n, mat);
}
long long int rezultat = sum_mat(mat, n, m);
fprintf(out, "%lld", rezultat);
// dezalocare memorie matrice
for (int i = 0; i < n; i++)
free(mat[i]);
free(mat);
fclose(in);
fclose(out);
return 0;
}