Cod sursa(job #2020450)

Utilizator iuliaulialiaiaIulia Maria iuliaulialiaia Data 10 septembrie 2017 13:15:21
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.53 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];
	}
}

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;
}

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

int main() {

	int matrix[17][17], aux[17][17];
	int i, j, m, n, sum;
	FILE *in, *out;

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

	for ( i = 1; i <= n; i++ )
		for ( j = 1; j <= m; j++ ) {
			while ( aux[i][0] < 0 || aux[0][j] < 0 ) {
				if ( aux[i][0] < aux[0][j] ) changeLine(i, m, aux);
				else changeColumn(j, n, aux);
				update(n, m, aux);
				if ( sum < aux[0][0] ) sum = aux[0][0];
			}
			copy(n, m, matrix, aux);
		}

	out = fopen("flip.out", "w");
	if ( out == NULL ) return 1;
	fprintf(out, "%d", sum);
	fclose(out);

	return 0;
}