Cod sursa(job #80137)

Utilizator valkyriaValkyria Dark valkyria Data 26 august 2007 14:08:47
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ifstream f;
	f.open("flip.in");
	int mx[16][16];
	int m,n;
	f>>m;
	f>>n;
	int smax=0;
	short int linii[16];
	short int coloane[16];
	for (int i=0; i<m; i++)
	{ linii[i]=1; }
	for (int i=0; i<n; i++)
	{ coloane[i]=1;}
	for (int i=0; i<m; i++)
	{
		for (int j=0; j<n; j++)
		{ 
		f>>mx[i][j];
		smax += mx[i][j];
		}
	}
	int s, im, jm, si, sj, c=0;
	while (c==0)
	{
		c++;
		si=36000;
		for (int i=0; i<m; i++)
		{
			if (linii[i]!=0)
			{
			s=0;
			c=0;
			for (int j=0; j<n; j++)
			{ 
				s+=mx[i][j];
			 }
			if (s<si)
			{ 
				si=s;
				im=i;
			}
			}
		}	
		sj=36000;
		for (int j=0; j<n; j++)
		{	
			if (coloane[j]!=0)
			{
			s=0;
			c=0;
			for (int i=0; i<m; i++)
			{ 
				s+=mx[i][j];
			 }
			if (s<sj)
			{ 
				sj=s;
				jm=j;
			}
			}
		}
		if (si<sj) 
		{
			if (si<=0)
			{
			linii[im]=0;
			s=smax;
			for (int j=0; j<n; j++)
				{ 
					mx[im][j]*=-1;
					s+=2*mx[im][j];
				
			 	}
			
			if (s>smax)
			{
				smax=s;
				c=0;
			}
			}
			else c=4;
		}
		else
		{
			if (sj<=0)
			{
			coloane[jm]=0;
			s=smax;
			for (int i=0; i<m; i++)
			{	
				mx[i][jm]*=-1;
				s+=2*mx[i][jm];
			 }
			if (s>smax)
			{
				smax=s;
				c=0;
			}
			}
			else c=4;
		}	
	}
	ofstream g;
	g.open("flip.out");
	g<<smax;
	g.close();
	return 0;
}