Cod sursa(job #249107)

Utilizator loginLogin Iustin Anca login Data 27 ianuarie 2009 17:07:41
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
# include <fstream>
using namespace std;
int n, m, a[100][100];

ofstream fout ("flip.out");
void verlin (long long [][100]);
void vercol (long long [][100]);
void init (int);
void comutac (int);
void comutal (int);

void citire ()
{
     ifstream fin ("flip.in");
     int i, j; 
     fin>>n>>m;
     for (i=1;i<=n;i++)
         for (j=1;j<=m;j++)
             fin>>a[i][j];
     fin.close ();
}

int main ()
{
    long long c[2][100], l[2][100];
    long long  s=0;
    int i, j;
    citire ();
    verlin(l);
    vercol(c);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            s+=a[i][j];
    fout<<s;
    fout.close ();
    return 0;
}
void init (long long b[][100], int ce)
{
     int i, j;
     if (ce==1)
     {
         for (i=1;i<=2;i++)
             for (j=1;j<=n;j++)    
                 b[i][j]=b[i][j]*0;
     }
     else
         if (ce==2)
         {
            for (i=1;i<=2;i++)
                for (j=1;j<=m;j++)    
                    b[i][j]=b[i][j]*0;
         }             
}
void verlin (long long l[][100])
{
    int i, j, pp=0;
    while (!pp)
    {
          pp=1;
          init(l, 1);  
          for (i=1;i<=n;i++)
              for (j=1;j<=m;j++)  
                  if (a[i][j]<0)  
                    l[2][i]+=a[i][j];
                  else
                    l[1][i]+=a[i][j];
          for (i=1;i<=n;i++)
              if (l[2][i]+l[1][i]<0)
                 pp=0, comutal(i);
    }
}
void vercol (long long c[][100])
{
     int i, j, pp=0;
     while (!pp)
     {
           pp=1;
           init (c, 2);
           for (i=1;i<=n;i++)
               for (j=1;j<=m;j++)
                   if (a[i][j]<0)
                      c[2][j]+=a[i][j];
                   else
                       c[1][j]+=a[i][j];
           for (j=1;j<=m;j++)
               if (c[2][j]+c[1][j]<0)
                  pp=0, comutac (j);
     }
}
void comutal (int i)
{
     int j;
     for (j=1;j<=m;j++) 
         a[i][j]=-1*a[i][j];     
}
void comutac (int j)
{
     int i;
     for (i=1;i<=n;i++)
         a[i][j]=-1*a[i][j];
}