Cod sursa(job #2452972)

Utilizator puya98Andrei puya98 Data 1 septembrie 2019 21:57:40
Problema Jocul Flip Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#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;
}