Cod sursa(job #462854)

Utilizator Ha11owedVa rog deactivati contul Ha11owed Data 13 iunie 2010 19:56:46
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>

#define col(x) scol[x][0]
#define colf(x) scol[x][1]
#define lin(x) slin[x][0]
#define linf(x) slin[x][1]

#define flip_lin(x) for(gi=0; gi<m; gi++) {a[x][gi] = -a[x][gi];}
#define flip_col(x) for(gi=0; gi<n; gi++) {a[gi][x] = -a[gi][x];}

#define SIZE 16
int a[SIZE][SIZE];
int scol[SIZE][2], slin[SIZE][2];
int n, m, gi, s;

void rezolva() {
	int i, j;
	for(i=0; i<n; i++) {
		lin(i) = linf(i) = 0;
		for(j=0; j<m; j++) {
			lin(i) += a[i][j];
			linf(i) -= a[i][j];
		}
	}
	
	for(i=0; i<n; i++) {
		if(linf(i) > lin(i))
			flip_lin(i);
	}
	for(j=0; j<m; j++) {
		col(j) = colf(j) = 0;
		for(i=0; i<n; i++) {
			col(j) += a[i][j];
			colf(j) -= a[i][j];
		}
	}
	for(j=0; j<m; j++)
		if(colf(j) > col(j))
			flip_col(j);
			
	for(i=0; i<n; i++)
		for(j=0; j<m; j++)
			s+=a[i][j];
}

int main(int argc, char **argv) {
	int i, j;
	FILE *f = fopen("flip.in", "r");
	if(f == NULL) { fclose(f); printf("eroare la citire!\n"); return -1; };
	fscanf(f, "%d", &n);
	fscanf(f, "%d", &m);
	for(i=0; i<n; i++)
		for(j=0; j<m; j++)
			fscanf(f, "%d", &a[i][j]);
	fclose(f);
	
	rezolva();
	
	f = fopen("flip.out", "w");
	fprintf(f, "%d\n", s);
	fclose(f);
	
	return 0;
}