Cod sursa(job #2660870)

Utilizator matthewvandyekBeatrice Lollio matthewvandyek Data 20 octombrie 2020 19:00:27
Problema Jocul Flip Scor 20
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>

void*** Dio=NULL;

struct S
{
	int poz;
	int neg;
};

void readmatrix(int N, int M, int A[N][M], FILE* fp)
{
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < M; ++j)
		{
			fscanf(fp, "%d ", &A[i][j]);
		}
	}
}

void testmatrix(int N, int M, int A[N][M])
{
	printf("\n");
	for(int i = 0; i < N; ++i)
	{
		for (int j = 0; j < M; ++j)
			printf("%d ", A[i][j]);
		printf("\n");
	}
}

void swap(int N, int M, int A[N][M], int k, int type)
{
	if (type == 0) // then switch line	
		for (int j = 0; j < M; ++j) A[k][j] *= -1;


	if (type == 1) // then switch column
		for (int i = 0; i < N; ++i) A[i][k] *= -1;
}

int sum(int N, int M, int A[N][M])
{
	int sum = 0;
	for (int i = 0; i < N; ++i)
		for (int j = 0; j < M; ++j)
			sum += A[i][j];

	return sum;
}

int main()
{

	FILE* fp;
	fp = fopen("flip.in", "r");

	int N, M;
	fscanf(fp, "%d %d", &N, &M);

	int A[N][M];   
	readmatrix(N, M, A, fp);

	// initialise structure values
	struct S Lin[N], Col[M];
	for (int i = 0; i < N; ++i) Lin[i].poz = Lin[i].neg = 0;
	for (int j = 0; j < M; ++j) Col[j].poz = Col[j].neg = 0;

	// algorithm
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < M; ++j)
			if (A[i][j] > 0) Lin[i].poz += A[i][j];
			else if (A[i][j] < 0) Lin[i].neg += (-A[i][j]);
		if (Lin[i].poz < Lin[i].neg) swap(N, M, A, i, 0);
	}
	for (int j = 0; j < M; ++j)
	{
		for (int i = 0; i < N; ++i)
			if (A[i][j] > 0) Col[j].poz += A[i][j];
			else if (A[i][j] < 0) Col[j].neg += (-A[i][j]);
		if (Col[j].poz < Col[j].neg) swap(N, M, A, j, 1); 
	}
	fclose(fp);

	fp = fopen("flip.out", "w");
	fprintf(fp, "%d\n", sum(N,M,A));
	return 0;
}