Cod sursa(job #200110)

Utilizator IrnukIrina Grosu Irnuk Data 22 iulie 2008 12:29:56
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
/*filip infoarena
ideea este ca incerc sa modific liniile si coloanele astfel incat */

#include<fstream.h>

ifstream fin("flip.in");
ofstream fout("flip.out");

int n,m,ok,sv_j;
long a[20][20],min,col,t_suma;

struct a
{
 int i,j;
}ls_min;
void citire()
{
	int i,j;
	fin>>n>>m;

	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			fin>>a[i][j];
}

long suma_linie(long v[], int n)
{
	int i;
	long suma=0;
	for(i=0;i<n;i++)
		suma+=v[i];
	return suma;
}

long suma_coloana(int c,int m)
{
	int i;
	long suma=0;
	for(i=0;i<m;i++)
		suma+=a[i][c];
	return suma;
}
void bordeaza_matricea()
{
	int i;

	for(i=0;i<n;i++)
		a[i][m]=suma_linie(a[i],m);
	for(i=0;i<m;i++)
		a[n][i]=suma_coloana(i,n);
}

void cauta_minim()
{
	int i;
	for(i=0;i<m;i++)
		if(a[n][i]<min  && i!=ls_min.j)
		{

			min=a[n][i];
			sv_j=i;
		}
	for(i=0;i<n;i++)
		if(a[i][m]<min  && i!=ls_min.j)
		{
			col=0;
			min=a[i][m];
			sv_j=i;
		}

	if(col==1)
{
	ls_min.i=n;
	ls_min.j=sv_j;
	}
	else
	{ls_min.i=m; ls_min.j=sv_j;}
}

void schimba_linie()
{
	long s=0;
	int i;
	for(i=0;i<m;i++)
	{
		a[sv_j][i]*=-1;
		s+=a[sv_j][i];
	}
	a[sv_j][m]=s;
	for(i=0;i<m;i++)
		a[n][i]=suma_coloana(i,n);
}

void schimba_coloana()
{
	
	int i;
	for(i=0;i<n;i++)

		a[i][sv_j]*=-1;


	a[n][sv_j]*=-1;
	for(i=0;i<n;i++)
	 {	a[i][m]=suma_linie(a[i],m);
	 }
}

int main()
{
	int i;
	long t_suma_1=0;
	citire();
	bordeaza_matricea();
	while(ok<1000)
	{ok++;
		col=1;
		min=1000000;
		sv_j=0;
		cauta_minim();
			if(col==0)
				schimba_linie();
			else
				schimba_coloana();
	
		t_suma_1=0;
	for(i=0;i<m;i++)
		t_suma_1+=a[n][i];
	if(t_suma_1>t_suma) 
		t_suma=t_suma_1;
	}
	

	fout<<t_suma<<'\n';
	fout.close();
	return 0;
}