Cod sursa(job #2543305)

Utilizator LianiuIulian Panaitescu Lianiu Data 11 februarie 2020 01:01:39
Problema Jocul Flip Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <stdio.h>
#include <stdlib.h>

int suma_maxima(int **tabla,int N,int M){

	int i,j,*suma_poz_col,*suma_neg_col,*suma_poz_linii,*suma_neg_linii,suma_maxima=0;

	suma_poz_linii=calloc(N,sizeof(int));
	if(!suma_poz_linii)
		return 0;
	suma_neg_linii=calloc(N,sizeof(int));
	if(!suma_neg_linii)
		return 0;
	suma_poz_col=calloc(M,sizeof(int));
	if(!suma_poz_col)
		return 0;
	suma_neg_col=calloc(M,sizeof(int));
	if(!suma_neg_col)
		return 0;

	for(i=0;i<N;i++){
		for(j=0;j<M;j++){
			if(tabla[i][j]<=0){
				suma_neg_linii[i]+=tabla[i][j];
				suma_neg_col[j]+=tabla[i][j];
			}
			else{
				suma_poz_linii[i]+=tabla[i][j];
				suma_poz_col[j]+=tabla[i][j];
			}
		}
	}

	for(i=0;i<N;i++){
		for(j=0;j<M;j++){
			if(((-1)*suma_neg_linii[i])>suma_poz_linii[i]){
				tabla[i][j]=(-1)*tabla[i][j];
			}
		}
	}

	for(i=0;i<N;i++){
		for(j=0;j<M;j++){
			if(((-1)*suma_neg_col[j])>suma_poz_col[j]){
				tabla[i][j]=(-1)*tabla[i][j];
			}
		}
	}

	for(i=0;i<N;i++){
		for(j=0;j<M;j++){	
			suma_maxima+=tabla[i][j];
		}
	}
	free(suma_poz_linii);
	free(suma_neg_linii);
	free(suma_poz_col);
	free(suma_neg_col);

	return suma_maxima;
}

int main(){

	FILE *input=fopen("flip.in","rt");
	if(!input)
		return 0;

	int N,M,i,**tabla,j;

	fscanf(input,"%i %i",&N,&M);

	tabla=malloc(N*sizeof(int*));
	if(!tabla)
		return 0;

	for(i=0;i<N;i++){
		tabla[i]=malloc(M*sizeof(int));
		if(!tabla[i])
			return 0;
	}

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

	fclose(input);

	FILE *output=fopen("flip.out","wt");
	if(!output)
		return 0;

	fprintf(output,"%i\n",suma_maxima(tabla,N,M));

	fclose(output);

	for(i=0;i<N;i++){
		free(tabla[i]);
	}
	free(tabla);

	return 0;
}