Cod sursa(job #949943)

Utilizator dpopovicDana Popovici dpopovic Data 15 mai 2013 15:27:43
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX 16

/*
void print_tab(int **tab, int maxl, int maxc) {
	int i, j;
	for (i=0; i<maxl; i++) {
		for(j=0; j<maxc; j++)
			printf("%4d", tab[i][j]);
		printf("\n");
	}
	printf("\n");
}
*/


void write_suma(int suma, char *filename) {
	FILE *f2 = fopen(filename, "w");
	fprintf(f2, "%d\n", suma);
	fclose(f2);
}


int main() {

	int N, M, suma, i, j, slin, stmp, b,x;
	int **Flip;
	
	clock_t start = clock();
	
	FILE *f1 = fopen("flip.in", "r");

	fscanf(f1, "%d", &N); fscanf(f1, "%d", &M);
	
	Flip = (int**)malloc(N * sizeof(int*));
	for(i = 0; i < N; i++) 
		Flip[i] = (int*)malloc(M * sizeof(int));
	
	for(i=0; i<N; i++)
		for(j=0; j<M; j++)
			fscanf(f1, "%d", &Flip[i][j]);

	fclose(f1);	
	
	suma=0;
	// b < 2^M (1 leftshift M)
	for(b=0;b<1<<M;b++)
	{
    		//cout<<"b="<<b;
		stmp=0;
		for(i=0;i<N;i++)
		{
			slin=0;
			for(j=0,x=b;j<M;j++,x>>=1)
			{
				//cout<<"x="<<x<<"   j="<<j<<"\n";
				if(x&1)
					slin-=Flip[i][j];
				else
					slin+=Flip[i][j];
			}
			if(slin<0)
				stmp-=slin;
			else
				stmp+=slin;
		}
		if(stmp>suma)
			suma = stmp;
	}

	write_suma(suma, "flip.out");
	
	printf ( "%f\n", ( (double)clock() - start ) / CLOCKS_PER_SEC );

	return 0;	
}