Cod sursa(job #525244)

Utilizator mada_diaconuMada Diaconu mada_diaconu Data 24 ianuarie 2011 17:57:24
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n,m,i,j,k=1,r,s,z,v,x,y;
long a[17][17], b[17], c[17];
void diferenta_l (long a[17][17])
{long s;
	for (i=1;i<=n;i++)
	{
		s=0;
		for (j=1;j<=m;j++)
			s=s-a[i][j];
		b[i]=s;
	}
}
void diferenta_c (long a[17][17])
{
long s;
	for (j=1;j<=m;j++)
	{
		s=0;
		for (i=1;i<=n;i++)
			s=s-a[i][j];
		c[j]=s;
	}
}
int max (long a[17], int d)
{
	long max;
	max=a[1];
	for (i=1;i<=d;i++)
		if (max<a[i])
		{
			max=a[i]; r=i;
		}
		return max;
}
void inmultire_l (long a[17][17], int l)
{
	for (j=1;j<=m;j++)
		a[l][j]=-a[l][j];
}
void inmultire_c(long a[17][17], int c)
{
	for (i=1;i<=n;i++)
		a[i][c]=-a[i][c];
}
int main()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			f>>a[i][j];
	diferenta_l(a);
	diferenta_c(a);
	while (k)
	{
		k=0;
		x=max(b,n);
		z=r;
		y=max(c,m);
		v=r;
		if (max(b,n)>max(c,m))
		{
			if (max(b,n)>0)
			{
				inmultire_l(a,z);
				c[z]=-c[z];
				k=1;
			}
		}
		else
		{
			if (max(c,m)>0)
			{
				inmultire_c(a,v);
				b[v]=-b[v];
				k=1;
			}
		}
	}
	s=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			s=s+a[i][j];
		g<<s;
	f.close();
	g.close();
	return 0;
}