Cod sursa(job #20271)

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

#include <string.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 p[50][50])
 {
  int s=0;
  for (int i=0;i<n;i++)
   for (int j=0;j<m;j++)
    s+=p[i][j];
  return s;
 }

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

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

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

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

int flip (int n,int m)
 {
  int p[50][50];
  for (int u=0;u<n;u++)
   for (int y=0;y<m;y++)
    p[u][y]=mat[u][y];

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

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

 
 return 0;
 }