Cod sursa(job #2379168)

Utilizator sebastian.tudorTudor Sebastian sebastian.tudor Data 12 martie 2019 23:23:50
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <string.h>

#define MAX 16
#define TRUE 1
#define FALSE 0
#define FOR(i, n) for(int i = 0; i < n; i++)

void read(FILE *in, int a[][MAX], int n, int m)
{
	char c = 0;

	FOR(i, n)
		FOR(j, m)
			fscanf(in, "%d", &a[i][j]);
}

int sum(int a[][MAX], int n, int m)
{
	int l[MAX], c[MAX];
	int b = 0;
	int s = 0;

	memset(l, 0, n * sizeof(int));
	memset(c, 0, m * sizeof(int));

	FOR(i, n)
		FOR(j, m)
		{
			l[i] += a[i][j];
			c[j] += a[i][j];
			s += a[i][j];
		}

	do
	{
		b = 0;

		FOR(i, n)
			if (l[i] < 0)
			{
				b = 1;

				l[i] *= -1;
				s += 2 * l[i];

				FOR(j, m)
					a[i][j] *= -1;
			}
		
		FOR(j, m)
			if (c[j] < 0)
			{
				b = 1;

				c[j] *= -1;
				s += 2 * c[j];

				FOR(i, n)
					a[i][j] *= -1;
			}
	} while (b);
		
	return s;
}

int main()
{
	FILE *in, *out;
	int n, m;
	int a[MAX][MAX];

	in = fopen("flip.in", "r");
	out = fopen("flip.out", "w");

	fscanf(in, "%d%d", &n, &m);
	read(in, a, n, m);
	int c = sum(a, n, m);
	fprintf(out, "%d\n", c);

	fclose(in);
	fclose(out);

	return 0;
}