Cod sursa(job #500722)

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

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

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

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

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

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

int main(){
	long long int n,m;
	
	FILE *fi = fopen("flip.in","r");
	FILE *fo = fopen("flip.out","w");
	
	long long int **mat;
	long long int i,j;
	
	fscanf(fi,"%lld",&n);
	fscanf(fi,"%lld",&m);
	
	mat = (long long int**)malloc(n*sizeof(long long int*));
	for( long long int i = 0; i < n; i++ ){
		mat[i] = (long long int*)malloc(m*sizeof(long long int));
	}	
	
	for( i = 0; i < n; i++ ){
		for( j = 0; j < m; j++ ){
			fscanf(fi,"%lld",&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,"%lld",getMatSum(mat,n,m));
	fclose(fi);
	fclose(fo);
	return 0;
}