Cod sursa(job #648740)

Utilizator tzoky07Alexandru Gaman tzoky07 Data 14 decembrie 2011 07:12:14
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <cstdio>
#include <iostream>
#include <fstream>

using namespace std;

long int sol=0,total;
int nrLinii,nrColoane;
long int a[16][16];
int i,j;
long int aux[16];

long int value(long int a[16],int size)
{
	long int s = 0;
	for (int i=1;i<=size;i++)
		s += (long int) a[i];
	return s;
}

long int flippedValue(long int a[16],int size)
{
	long int s = 0;
	for (int i=1;i<=size;i++)
		s += (long int) -a[i];
	return s;
}

long int back(int n)
{total=0;
	if (n > nrLinii)
		return sol;
	else
	{	
		for ( i=1;i<=nrColoane;i++)
		{   
			for (j=1;j<=nrLinii;j++)
				aux[j] = a[j][i];
			//cout << "Normal line "<< n << " column " << i << " normal value " << value(aux,nrLinii) << endl;
			//cout << "Normal line "<< n << " column " << i << " flipped value " << flippedValue(aux,nrLinii) << endl;
			if ( value(aux,nrLinii) > flippedValue(aux,nrLinii) )
			{
				total += (long int) value(aux,nrLinii);
			}
			else
			{
				total += (long int) flippedValue(aux,nrLinii);
			}
		}
		if (total > sol) {sol = total;}
		cout << "Normal line "<< n << " total : " << total << endl;
		total = 0;
		for ( j=1;j<=nrColoane;j++)
			{
				a[n][j] = -a[n][j];
			}
		for ( i=1;i<=nrColoane;i++)
		{   
			for (j=1;j<=nrLinii;j++)
				aux[j] = a[j][i];
			//cout << "Flipped line "<< n << " column " << i << " normal value " << value(aux,nrLinii) << endl;
			//cout << "Flipped line "<< n << " column " << i << " flipped value " << flippedValue(aux,nrLinii) << endl;
			if ( value(aux,nrLinii) > flippedValue(aux,nrLinii) )
			{
				total += (long int) value(aux,nrLinii);
			}
			else
			{
				total += (long int) flippedValue(aux,nrLinii);
			}
		}
		if (total > sol) {sol = total;}
		else
		{
			for ( j=1;j<=nrColoane;j++)
			{
				a[n][j] = -a[n][j];
			}
		}
		cout << "Flipped line "<< n << " total : " << total << endl;
		return back(n+1);
	}
}

int main()
{	
	FILE* f = fopen("flip.in","r");
	fscanf(f,"%d %d",&nrLinii,&nrColoane);
	for (int i=1;i<=nrLinii;i+=1)
		for (int j=1;j<=nrColoane;j+=1)
			fscanf(f,"%ld",&a[i][j]);
	fclose(f);
		
	cout << a[1][1] << endl << a[13][2] << endl;
	
	ofstream out; out.open("flip.out");
	out << back(1);	
	out.close();
	return 0;
}