Cod sursa(job #500718)

Utilizator LP337Lazar Pavel LP337 Data 12 noiembrie 2010 22:21:45
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <stdio.h>
#include <stdlib.h>

int getLineSum( int **mat, int line, int cols, int neg ){
	int sum = 0;
	for( int i = 0; i < cols; i++ ){
		sum += mat[line][i]*neg;
	}
	
	return sum;
}

int getColSum( int **mat, int col, int lines, int neg ){
	int sum = 0;
	for( int i = 0; i < lines; i++ ){
		sum += mat[i][col]*neg;
	}
	
	return sum;
}

void inverseLine( int **mat, int line, int cols ){
	for( int i = 0; i < cols; i++ ){
		mat[line][i] *= -1;
	}
}

void inverseCol( int **mat, int col, int lines ){
	for( int i = 0; i < lines; i++ ){
		mat[i][col] *= -1;
	}
}

int getMatSum( int **mat, int lines, int cols ){
	int sum = 0;
	for( int i = 0; i < lines; i++ ){
		for( int j = 0; j < cols; j++ ){
			sum += mat[i][j];
		}
	}
	
	return sum;
}

int main(){
	int n,m;
	
	FILE *fi = fopen("flip.in","r");
	FILE *fo = fopen("flip.out","w");
	
	int **mat;
	int i,j;
	
	fscanf(fi,"%d",&n);
	fscanf(fi,"%d",&m);
	
	mat = (int**)malloc(n*sizeof(int*));
	for( int i = 0; i < n; i++ ){
		mat[i] = (int*)malloc(m*sizeof(int));
	}	
	
	for( i = 0; i < n; i++ ){
		for( j = 0; j < m; j++ ){
			fscanf(fi,"%d",&mat[i][j]);
		}
	}
	
	for( i = 0; i < n; i++ ){
		if( getLineSum(mat,i,m,1) < getLineSum(mat,i,m,-1) ){
			inverseLine(mat, i, m);
		}
	}
	
	for( i = 0; i < m; i++ ){
		if( getColSum(mat, i,n,1) < getColSum(mat,i,n,-1) ){
			inverseCol(mat, i, n);
		}
	}
	
	/*
	for( i = 0; i < n; i++ ){
		for( j = 0; j < m; j ++ ){
			fprintf(fo,"%d ",mat[i][j]);
		}
		fprintf(fo,"\n");
	}
	*/
	
	fprintf(fo,"%d",getMatSum(mat,n,m));
	fclose(fi);
	fclose(fo);
	return 0;
}