Cod sursa(job #560902)

Utilizator alex_k2Barbarasa Alex alex_k2 Data 18 martie 2011 19:02:47
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include <fstream>

const int d = 16;
bool x = false;

void citire ( int a[d][d], int &n, int &m );
void afisare ( int a[d][d], int n, int m );
int cont ( int a[d][d], int n, int m, int pas );
void back ( int a[d][d], int n, int m, int pas );

int main ()
{
	int a[d][d], pas, n, m;
	
	citire(a,n,m);
	back(a,n,m,pas);
	afisare(a,n,m);
	
	return 0;
}

void citire ( int a[d][d], int &n, int &m )
{
	std::ifstream f("flip.in");
	
	f >> n >> m;
	for ( int i=0; i<n; i++ )
		for ( int j=0; j<m; j++ )
			f >> a[i][j];
	
	f.close();
}	

void afisare ( int a[d][d], int n, int m )
{
	int s = 0;
	for ( int i=0; i<n; i++ )
		for ( int j=0; j<m; j++ )
			s += a[i][j];
	
	std::ofstream g("flip.out");
	
	g << s;
	
	g.close();
}


int cont ( int a[d][d], int n, int m, int pas )
{
	bool ok = false;
	
	if ( pas > n-1 )
	{
		pas -= n;
		ok = true;
	}
	
	if ( !ok )
	{
		int s1 = 0, s2 = 0;
			
		for ( int j=0; j<m; j++ )
		{
			s1 += a[pas][j];
			s2 += a[pas][j] * (-1);
		}
			
		if ( s2 > s1 )
		{
			for ( int j=0; j<m; j++ )
				a[pas][j] *= -1;
					
			return 1;
		}
	}
	else
	{
		int s1 = 0, s2 = 0;
			
		for ( int j=0; j<n; j++ )
		{
			s1 += a[j][pas];
			s2 += a[j][pas] * (-1);
		}
			
		if ( s2 > s1 )
		{
			for ( int j=0; j<n; j++ )
				a[j][pas] *= -1;
				
			return 1;
		}
	}
	
	return 0;
}
	
void back ( int a[d][d], int n, int m, int pas )
{
	if ( !x )
	{
		for ( int i=0; i<n+m && !x ; i++ )
		{
			pas = i;
			if ( cont (a,n,m,pas) )
				back(a,n,m,pas);
		}
	
		x = true;
	}
}