Pagini recente » Profil cat_red20 | Istoria paginii utilizator/arvlge | Cod sursa (job #1290951) | Cod sursa (job #238091) | Cod sursa (job #2000185)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, m, i, j, k, s = 0, sum = 0;
FILE *f, *g;
f = fopen("flip.in", "rt");
fscanf(f, "%d %d", &n, &m);
int** mat = malloc(n * sizeof(int*));
for (i = 0; i < n; i++) {
mat[i] = malloc(m * sizeof(int));
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
fscanf(f, "%d ", &mat[i][j]);
}
}
fclose(f);
g = fopen("flip.out", "wt");
//flip
if (m >= n) {
//max flip
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
s += mat[i][j];
}
if (s < 0) {
for (k = 0; k < m; k++) {
mat[i][k] = mat[i][k] - 2 * mat[i][k];
}
}
s = 0;
}
//min flip
for (j = 0; j < m; j++) {
for (i = 0; i < n; i++) {
s += mat[i][j];
}
if (s < 0) {
for (k = 0; k < n; k++) {
mat[k][j] = mat[k][j] - 2 * mat[k][j];
}
}
s = 0;
}
} else {
//max flip
for (j = 0; j < m; j++) {
for (i = 0; i < n; i++) {
s += mat[i][j];
}
if (s < 0) {
for (k = 0; k < n; k++) {
mat[k][j] = mat[k][j] - 2 * mat[k][j];
}
}
s = 0;
}
//min flip
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
s += mat[i][j];
}
if (s < 0) {
for (k = 0; k < m; k++) {
mat[i][k] = mat[i][k] - 2 * mat[i][k];
}
}
s = 0;
}
}
//compute maximum sum
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
sum += mat[i][j];
}
}
//write result
fprintf(g, "%d ", sum);
fclose(g);
//free memory
for (i = 0; i < n; i++) {
free(mat[i]);
}
free(mat);
return 0;
}