Cod sursa(job #293310)

Utilizator redkar23Dezactiveazama redkar23 Data 1 aprilie 2009 10:33:57
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>

using namespace std;

fstream f,g;
int i,j,m,n;
int flip[17][17];
long vect[4];
long sum;

void change(int i,int j)
{
   int x;
   for(x=0;x<4;x++)
      vect[x]=0;

// 0 0 
   for(x=1;x<=n;x++)
      if(x!=j)
	     vect[0]+=flip[i][x];
   for(x=1;x<=m;x++)
      vect[0]+=flip[x][j];

// 0 1
   for(x=1;x<=n;x++)
      if(x!=j)
	     vect[1]+=flip[i][x];
   for(x=1;x<=m;x++)
       vect[1]+=-flip[x][j];

// 1 0
   for(x=1;x<=n;x++)
      vect[2]+=-flip[i][x];
	for(x=1;x<=m;x++)
	  if(x!=i)
	     vect[2]+=flip[x][j];

// 1 1 
   for(x=1;x<=n;x++)
      if(x!=j)
	     vect[3]+=-flip[i][x];
    for(x=1;x<=m;x++)
	   if(x!=i)
	      vect[3]+=-flip[x][j];
    vect[3]+=flip[i][j];
	
	long max=-16000000;
	int pos;
	for(x=0;x<4;x++)
	   if(vect[x]>max)
	    {
		  max=vect[x];
		  pos=x;
		 }
	switch(pos)
	{
	    case 1:
		    for(x=1;x<=m;x++)
			  flip[x][j]=-flip[x][j];
			 break;
	    case 2:
		    for(x=1;x<=n;x++)
			   flip[i][x] = -flip[i][x];
			break;
	    case 3:
		    for(x=1;x<=n;x++)
			   flip[i][x]=-flip[i][x];
			 for(x=1;x<=m;x++)
				   flip[x][j] = -flip[x][j];	
	}
}

int main()
{
f.open("flip.in",fstream::in);
g.open("flip.out",fstream::out);
   f >> m >> n;
   for(i=1;i<=n;i++)
	    for(j=1;j<=m;j++)
		   f >> flip[i][j];
	for(i=1;i<=n;i++)
		  for(j=1;j<=m;j++)
		    change(i,j);
   for(i=1;i<=n;i++)
	     for(j=1;j<=m;j++)
		   sum+=flip[i][j];
	  g << sum << "\n";
	  f.close();
	  g.close();
   return 0;	
}