Pagini recente » Cod sursa (job #2407299) | Cod sursa (job #1259035) | Cod sursa (job #917427) | Cod sursa (job #3184465) | Cod sursa (job #2452971)
#include <stdlib.h>
#include <stdio.h>
#include <fstream.h>
int check_line(int* a, int size) {
int i = 0, sum = 0, dif = 0;
while (i < size) {
if (a[i] > 0)
sum += a[i];
else dif += a[i];
i++;
}
if (sum > -dif)
return 1;
return 0;
}
int main() {
FILE* fi, * fo;
int i, j, n, m, total = 0;
int** a;
int* sw, * line;
fi = fopen("flip.in", "r");
fo = fopen("flip.out", "w");
fscanf(fi, "%d %d", &n, &m);
a = (int**)malloc(n * sizeof(int*));
sw = (int*)calloc(n + m, sizeof(int));
for (i = 0; i < n; i++) {
a[i] = (int*)malloc(m * sizeof(int));
for (j = 0; j < m; j++)
fscanf(fi, "%d", &a[i][j]);
}
for (i = 0; i < n; i++) {
if (check_line(a[i], m) == 0)
sw[i] = 1;
}
line = (int*)malloc((n + 1) * sizeof(int));
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++)
line[j] = a[j][i];
if (check_line(line, n) == 0)
sw[n + i] = 1;
}
free(line);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
if ((sw[i] == 1 && sw[n + j] != 1) || (sw[i] != 1 && sw[n + j] == 1))
total -= a[i][j];
else total += a[i][j];
}
fprintf(fo, "%d\n", total);
for (i = 0; i < n; i++)
free(a[i]);
free(a);
fclose(fi);
fclose(fo);
return 0;
}