Cod sursa(job #2801426)

Utilizator chiutamarcelChiuta Mihai Marcel chiutamarcel Data 16 noiembrie 2021 11:15:28
Problema Jocul Flip Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

#define MAX 16

FILE *fin, *fout;

int N, M, i, j;
int tabla[MAX][MAX];
int sum_L[MAX], sum_C[MAX];

int minj = 0;
int mini = 0;

int c = 0;
int suma = 0;

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

void citire() {
	fscanf(fin, "%d %d", &N, &M);
	for (i = 0; i < N; i++) {
		for (j = 0; j < M; j++) {
			fscanf(fin, "%d", &tabla[i][j]);
		}
	}
}

void calculeaza_sumele() {
	for (i = 0; i < N; i++) {
		for (j = 0; j < M; j++) {
			sum_C[j] += tabla[i][j];
			sum_L[i] += tabla[i][j];
		}
	}
}

void verifica() {
	c = 0;
	for (i = 0; i < N; i++) {
		if (sum_L[i] < 0) c++;
	}

	for (j = 0; j < M; j++) {
		if (sum_C[j] < 0) c++;
	}
	//printf("c:%d\n", c);
}

void calculeaza_minim() {
	for (j = 0; j < M; j++) {
		if (sum_C[minj] > sum_C[j])
			minj = j;
		//printf("C[%d] = %d\n", j, sum_C[j]);
	}

	//printf("\n");

	for (i = 0; i < N; i++) {
		if (sum_L[mini] > sum_L[i])
			mini = i;
		//printf("L[%d] = %d\n", j, sum_L[i]);
	}
	//printf("\n");
}

void comuta() {
	if (sum_C[minj] < sum_L[mini]) {
		//printf("%d\n", sum_C[minj]);
		sum_C[minj] *= -1;
		for (i = 0; i < N; i++) {
			tabla[i][minj] *= -1;
		}
	}
	else {
		//printf("%d\n", sum_L[mini]);
		sum_L[mini] *= -1;
		for (j = 0; j < M; j++) {
			tabla[mini][j] *= -1;
		}
	}
}

void calculeaza_rezulat() {
	
	for (i = 0; i < N; i++) {
		for (j = 0; j < M; j++) {
			suma += tabla[i][j];
		}
	}

	//printf("%d\n", suma);
}



int main() {
	fin = fopen("flip.in", "r");
	fout = fopen("flip.out", "w");
	
	citire();
	calculeaza_sumele();
	verifica();

	while (c > 0) {
		calculeaza_minim();
		comuta();
		afiseaza_matrice();
		verifica();
	}

	//printf("\nRezultat:");
	calculeaza_rezulat();
	fprintf(fout, "%d", suma);
}