Cod sursa(job #2057985)

Utilizator dan.stefanescuDan Stefanescu dan.stefanescu Data 4 noiembrie 2017 23:08:00
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>

int getSum(int *v,int n) {
	int i;
	int s=0;
	for(i=0;i<n;i++) {
		s+=v[i];
	}

	return s;
}

int getNegSum(int *v,int n) {
	int i;
	int s=0;
	for(i=0;i<n;i++) {
		s+=v[i]*(-1);
	}

	return s;
}

void flip(int *v,int n) {
	int i;
	for(i=0;i<n;i++) {
		v[i]=v[i]*(-1);
	}
}

int main() {
	FILE *f = fopen("flip.in","rt");
	int n,m,aux1,aux2,s;
	fscanf(f,"%d",&n);
	fscanf(f,"%d",&m);
	int **a;
	a=malloc(sizeof(int *)*n);
	int i,j;
	for(i=0;i<n;i++) {
		a[i] = malloc(sizeof(int)*m);
	}

	for(i=0;i<n;i++) {
		for(j=0;j<m;j++)
		{
			fscanf(f,"%d",&a[i][j]);
		}
	}

	for(i=0;i<n;i++)
	{
		aux1=getSum(a[i],m);
		aux2=getNegSum(a[i],m);
		if(aux2>aux1) {
			flip(a[i],m);
		}
	}


	for(j=0;j<m;j++) {
		aux1=0;
		for(i=0;i<n;i++) {
			aux1+=a[i][j];
		}
		aux2=0;
		for(i=0;i<n;i++) {
			aux2+=a[i][j]*(-1);
		}

		if(aux2>aux1) {
			for(i=0;i<n;i++) {
				a[i][j]=a[i][j]*(-1);
			}
		}
	}
	s=0;
	for(i=0;i<n;i++) {
		for(j=0;j<m;j++)
		{
			s+=a[i][j];
		}
	}


	fclose(f);
	for(i=0;i<n;i++) {
		free(a[i]);
	}
	free(a);
	f=fopen("flip.out","wt");
	fprintf(f,"%d\n",s);
	fclose(f);





	return 0;
}