Cod sursa(job #416818)

Utilizator andunhillMacarescu Sebastian andunhill Data 13 martie 2010 16:12:26
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<fstream>
using namespace std;
ifstream f("flip.in"); ofstream g("flip.out");
long i,j,s,si,st1,st2,st,m,n,max1,tab[17][17],ss; bool comp; int ruli,rulc,sr;
int citire()
{ int st=0;
	for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	{ f>>tab[i][j]; st=st+tab[i][j]; }
 return 0;
}
int flip_linie()
{ s=0; si=0; 
 for(j=1;j<=m;j++)
  {	si=si+tab[i][j];
    s=s+tab[i][j]*(-1);
    if(comp==1) { sr=sr+tab[i][j]; tab[i][j]=tab[i][j]*(-1); ss=ss+tab[i][j]; ruli++; }
	else st1=st1+tab[i][j]; 
  } 
  comp=0;
  if(si<s&&ruli==0) comp=1;
  else
	comp=0; 
  ruli=0; 
  return comp;
}
int flip_coloana()
{ s=0; si=0; 
  for(i=1;i<=n;i++)
  { si=si+tab[i][j];
    s=s+tab[i][j]*(-1);
	if(comp==1) { sr=sr+tab[i][j]; tab[i][j]=tab[i][j]*(-1); ss=ss+tab[i][j]; rulc++; }
	else st2=st2+tab[i][j];
  } comp=0;
  if(si<s&&rulc==0) comp=1;
  else 
	comp=0;
 rulc=0;
  return comp;
}
int back()
{ for(i=1;i<=n;i++)
 {  flip_linie(); 
    if(comp==1) { ruli=1; flip_linie(); }
 } st1=st1-sr+ss;
 if(st<=st1) max1=st1; 
 else
	max1=st;
 sr=0; st1=0; ss=0;
  for(j=1;j<=m;j++)
  { flip_coloana();
    if(comp==1) flip_coloana();
  }
  st2=st2-sr+ss;
  if(max1<st2) max1=st2;
 return max1;
}
int main()
{ f>>n>>m;
  citire();
  back();
  g<<max1;
  f.close(); g.close();
  return 0;
}