Cod sursa(job #458016)

Utilizator costy_petrisorPetrisor Costy costy_petrisor Data 22 mai 2010 17:31:09
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

#define FILE_IN		"flip.in"
#define FILE_OUT	"flip.out"

#define COMS(coms, i) (((coms >> i) & 1) ? -1 : 1)

int n, m;
int table[256];

int doSum (int comsN, int comsM)
{
	int sum = 0;
	int i, j;
	for (i = 0; i < n; ++i)
		for (j = 0; j < m; ++j)
		{
			//sum += table[i][j] * COMS(comsN, i) * COMS(comsM, j);
			sum += (*((int*)table + (i * 16 + j))) * COMS(comsN, i) * COMS(comsM, j);
		}
	return sum;
}

int doSwitches ()
{
	int maxSum = 0xFFFFFFFF;
	int maxComsN = 1 << (n - 1);
	int maxComsM = 1 << (m - 1);
	int i, j;

	for (i = 0; i < maxComsN; ++i)
		for (j = 0; j < maxComsM; ++j)
		{
			int sum = doSum(i, j);
			if (abs(sum) > maxSum)
				maxSum = abs(sum);
		}
	return maxSum;
}

int main()
{
	FILE* file;

	int i, j;

	file = fopen(FILE_IN, "r");
	fscanf(file, "%d %d", &n, &m);
	for (i = 0; i < n; ++i)
		for (j = 0; j < m; ++j)
		{
			//fscanf(file, " %d", &(table[i][j]));//(int**)table + (((i * 16) + j) * sizeof(int)));
			fscanf(file, " %d", (int*) table + (i * 16 + j));
		}	
	fclose(file);

	file = fopen(FILE_OUT, "w");
	fprintf(stdout, "%d", doSwitches());
	fclose(file);
	return 0;
}