Cod sursa(job #593295)

Utilizator qwertyuPeter Eke qwertyu Data 2 iunie 2011 09:13:57
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#define _CRT_SECURE_NO_DEPRECATE
#define ms 17
#define ns ms-1

#include <stdlib.h>
#include <stdio.h>

int static a[ms][ms],n,m,*l[ms*2],o;

int sum();
int flip(int x);
int fill(void *x, int n, int c);
int flob(int x);

int main(int argc, char **argv, char **env)
{
	FILE *fi = fopen("flip.in","r");

	fill(a,ms*ms,1);

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

	o=n+m;
	for (int i=0; i<m; i++)
		l[i]=&a[ns][i];
	for (int i=0; i<n; i++)
		l[i+m]=&a[i][ns];

	int q=1;
	int s=sum(),ss;

	while (q)
	{
		q = flob(0);
		ss = sum();
		if (ss>s) s = ss;
	}

	FILE *fo = fopen("flip.out","w");
	fprintf(fo,"%d",s);
	fclose(fo);

	return 0;
}

int sum()
{
	int s = 0;

	for (int i=0;i<n;i++)
	for (int j=0;j<m;j++)
	{
		s += a[i][j]*a[ns][j]*a[i][ns];
	}
	
	return s;
}

int flip(int x)
{
	if (x<m)
		for (int i=0; i<n; i++) a[i][x]=-a[i][x];
	else
		for (int i=0; i<m; i++) a[x][i]=-a[x][i];
	return 0;
}

int fill(void *x, int n, int c)
{
	int *p = (int *)x;
	while (n--)
	{
		*p = c;
		p++;
	}
	return 0;
}

int flob(int x)
{
	if (l[x]==NULL) return 0;
	else if  ((*(l[x])*=-1)==1) return flob(x+1);
	else return 1;
}