Cod sursa(job #2020430)

Utilizator iuliaulialiaiaIulia Maria iuliaulialiaia Data 10 septembrie 2017 11:14:11
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>

void update(int n, int m, int (*matrix)[17]) {
	int i, j;
	matrix[0][0] = 0;
	for ( i = 1; i <= n; i++ ) {
		matrix[i][0] = 0;
		for ( j = 1; j <= m; j++ )
			matrix[i][0] += matrix[i][j];
		matrix[0][0] += matrix[i][0];
	}
	for ( j = 1; j <= m; j++ ) {
		matrix[0][j] = 0;
		for ( i = 1; i <= n; i++ )
			matrix[0][j] += matrix[i][j];
		matrix[0][0] += matrix[0][j];
	}
}

void changeLine(int line, int m, int (*matrix)[17]) {
	for ( int i = 1; i <= m; i++ )
		matrix[line][i] *= -1;
}

void changeColumn(int column, int n, int (*matrix)[17]) {
	for ( int i = 1; i <= n; i++ )
		matrix[i][column] *= -1;
}

int getLineMin(int n, int (*matrix)[17]) {
	int min = 1;
	for ( int i = 2; i <= n; i++ )
		if ( matrix[min][0] > matrix[i][0] )
			min = i;
	return min;
}

int getColumnMin(int m, int (*matrix)[17]) {
	int min = 1;
	for ( int j = 2; j <= m; j++ )
		if ( matrix[0][min] > matrix[0][j] )
			min = j;
	return min;
}

int main() {

	int matrix[17][17];
	int i, j, m, n;
	int minLine, minColumn;
	FILE *in, *out;

	in = fopen("flip.in", "r");
	if ( in == NULL ) return 1;
	fscanf(in, "%d %d", &n, &m);
	for ( i = 1; i <= n; i++ )
		for ( j = 1; j <= m; j++ )
			fscanf(in, "%d", &matrix[i][j]);
	fclose(in);
	update(n, m, matrix);

	minLine = getLineMin(n, matrix);
	minColumn = getColumnMin(m, matrix);
	while ( matrix[minLine][0] < 0 || matrix[0][minColumn] < 0 ) {
		if ( matrix[minLine][0] < matrix[0][minColumn] ) changeLine(minLine, m, matrix);
		else changeColumn(minColumn, n, matrix);
		update(n, m, matrix);
		minLine = getLineMin(n, matrix);
		minColumn = getColumnMin(m, matrix);
	}

	out = fopen("flip.out", "w");
	if ( out == NULL ) return 1;
	fprintf(out, "%d", matrix[0][0]);
	fclose(out);

	return 0;
}