Cod sursa(job #20251)

Utilizator radamiRadu Patulescu radami Data 20 februarie 2007 21:35:07
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream.h>

int n,m,mat[50][50];

void citire (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>>mat[i][j];
  f.close();
 }



int suma (int n,int m)
 {
  int s=0;
  for (int i=0;i<n;i++)
   for (int j=0;j<m;j++)
    s+=mat[i][j];
  return s;
 }

int sL (int m,int r)
 {
  int s=0;
  for (int i=0;i<m;i++)
   s+=mat[r][i];
  return s;
 }

int sC (int n,int r)
 {
  int s=0;
  for (int i=0;i<n;i++)
   s+=mat[i][r];
  return s;
 }

void intoarceL (int m,int j)
 {
  int k;
  for (k=0;k<m;k++)
   mat[j][k]*=-1;
 }

void intoarceC (int n,int i)
 {
  int k;
  for (k=0;k<n;k++)
   mat[k][i]*=-1;
 }

int flip (int n,int m)
 {
  int s=suma(n,m),i,j,sumalin,h;
  for (h=0;h<n;h++)
   mat[h][m]=0;
  for (i=0;i<m;i++)
   {
    intoarceC (n,i);
    if (suma(n,m)>s)
     s=suma(n,m);
     else
      {for (j=0;j<n;j++)
       if (sL(m,j)<0)
	{
	 intoarceL(m,j);
	 mat[j][m]=1;
	}
       }
    if (suma(n,m)>s)
      {s=suma(n,m);}
     else
      {
       for (h=0;h<n;h++)
	if (mat[h][m]==1)
	 intoarceL(m,h);
       intoarceC (n,i);
      }
   }
  return s;
 }

int main ()
 {
 citire(n,m);
   std::ofstream g ("flip.out");
  g<<flip(n,m);

return 0;
 }