Cod sursa(job #2381455)

Utilizator mihaelamihaiuMihaela Mihaiu mihaelamihaiu Data 16 martie 2019 20:05:59
Problema Jocul Flip Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int suma_linie(int nr, int a[16][16], int m, int mod)
{
	int s = 0;
	if (mod == 0)
	{
		for (int i = 0; i < m; i++)
			s += a[nr][i];
	}
	else if (mod == 1)
	{
		for (int i = 0; i < m; i++)
			if (a[nr][i] > 0)
				s += a[nr][i];
	}
	else if (mod == -1)
	{
		for (int i = 0; i < m; i++)
			if (a[nr][i] < 0)
				s += a[nr][i];
	}
	return s;
}

int suma_coloana(int nr, int a[16][16], int n, int mod)
{
	int s = 0;
	if (mod == 0)
	{
		for (int i = 0; i < n; i++)
			s += a[i][nr];
	}
	else if (mod == 1)
	{
		for (int i = 0; i < n; i++)
			if (a[i][nr] > 0)
				s += a[i][nr];
	}
	else if (mod == -1)
	{
		for (int i = 0; i < n; i++)
			if (a[i][nr] < 0)
				s += a[i][nr];
	}
	return s;
}

void comuta_linie(int a[16][16], int nr, int m)
{
	for (int i = 0; i < m; i++)
		a[nr][i] *= -1;
}

void comuta_coloana(int a[16][16], int nr, int n)
{
	for (int i = 0; i < n; i++)
		a[i][nr] *= -1;
}

int suma_elemente(int a[16][16], int n, int m)
{
	int s = 0;
	for (int i = 0; i < n; i++)
		s += suma_linie(i, a, m, 0);
	return s;
}

int main()
{
	int n, m, a[16][16], i, j;
	FILE *fin, *fout;

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

	fscanf(fin, "%d %d", &n, &m);

	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			fscanf(fin, "%d", &a[i][j]);

	int schimb;
	do
	{
		schimb = 0;
		for (i = 0; i < n; i++)
			if (suma_linie(i, a, m, -1) * (-1) > suma_linie(i, a, m, 1))
			{
				comuta_linie(a, i, m);
				schimb = 1;
			}
		for (i = 0; i < m; i++)
			if (suma_coloana(i, a, n, -1) * (-1) > suma_coloana(i, a, m, 1))
			{
				comuta_coloana(a, i, n);
				schimb = 1;
			}
	} while (schimb);

	fprintf(fout, "%d", suma_elemente(a, n, m));

	fclose(fin);
	fclose(fout);

	return 0;
}