Cod sursa(job #249158)

Utilizator zackkTatu Christian Alexandru zackk Data 27 ianuarie 2009 19:26:16
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <stdio.h>

#define SUM table[16][16]


void reverseLine (long table[17][17], int i, int j, int m) {
    int ii, jj;
    for (jj = 0; jj < m; jj++) {
	table[i][jj] = 0 - table[i][jj];
    }
}

void reverseColumn (long table[17][17], int i, int j, int n) {
    int ii, jj;
    for (ii = 0; ii < n; ii++) {
	table[ii][j] = 0 - table[ii][j];
    }
}

int main (int argc, char ** argv) {
    FILE *fileIN, *fileOUT;
    int n, m;
    int i, j;
    long table[17][17];
    long sum = 0;
    int change = 0;
    
    fileIN = fopen("flip.in", "r");
    
    fscanf(fileIN, "%d", &n);
    fscanf(fileIN, "%d", &m);
    
    for (i = 0; i < n; i++) table[i][16] = 0;
    for (j = 0; j < n; j++) table[16][j] = 0;
    SUM = 0;
    
    for (i = 0; i < n; i++) {
	for (j = 0; j < m; j++) {
	    fscanf(fileIN, "%ld", &table[i][j]);
	    SUM += table[i][j];
	    table[i][16] += table[i][j];
	    table[16][j] += table[i][j];
	}
    }
    
    fclose(fileIN);
    
    
    change = 1;
    while (change != 0) {
	change = 0;
	for (i = 0; i < n; i++) {
	    for (j = 0; j < m; j++) {
		if ((table[i][16] + table[16][j] - table[i][j]) < 0) {
		    SUM -= table[i][16];
		    table[i][16] -= table[i][j];
		    table[i][16] *= -1;
		    table[i][16] += table[i][j];
		    SUM += table[i][16];
		    
		    SUM -= table[16][j];
		    table[16][j] -= table[i][j];
		    table[16][j] *= -1;
		    table[16][j] += table[i][j];
		    SUM += table[16][j];
		    
		    reverseLine(table, i, j, m);
		    reverseColumn(table, i, j, n);
		    
		    change = 1;
		} else if (table[i][16] < 0) {
		    SUM -= table[i][16];
		    table[i][16] *= -1;
		    SUM += table[i][16];
		    
		    reverseLine(table, i, j, m);
		    
		    change = 1;
		} else if (table[16][j] < 0) {
		    
		    SUM -= table[16][j];
		    table[16][j] *= -1;
		    SUM += table[16][j];
		    
		    reverseColumn(table, i, j, n);
		    
		    change = 1;
		}
	    }
	}
    }
    
    fileOUT = fopen("flip.out", "w");
    
    fprintf(fileOUT, "%ld", SUM);
    
    fclose(fileOUT);
    
    return 0;
}