Cod sursa(job #2082640)

Utilizator ptudortudor P ptudor Data 6 decembrie 2017 17:16:21
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.71 kb
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
int v[20][20];
bitset <20>b;
bitset <20>b2;
    int n,m;
int ad_b()
{
    int i=1;
    int j;
    while (b[i]==1)
    {
        b[i]=0;
        i++;
        if (i>m)
            {
                b.reset();
                return 1;
            }
    }
    b[i]=1;
    return 0;
}
int ad_b2()
{
    int i=1;
    int j;
    while (b2[i]==1)
    {
        b2[i]=0;
        i++;
        if (i>n)
            {
                b2.reset();
                return 1;
            }
    }
    b2[i]=1;
    return 0;
}
int main()
{
    ifstream in("flip.in");
    ofstream out("flip.out");
        in>>n>>m;
    int i,j;
    int s=0;
    for (i=1;i<=n;i++)
    {
        s=0;
        for (j=1;j<=m;j++)
        {
            in>>v[i][j];
            s=s+v[i][j];
        }
       v[i][0]=s;
    }
    for (j=1;j<=m;j++)
    {
        s=0;
        for (i=1;i<=n;i++)
        {
            s=s+v[i][j];
        }
        v[0][j]=s;
    }
    int M=0;
   while (ad_b()==0)
   {
       while (ad_b2()==0)
       {
           s=0;
           for (j=1;j<=m;j++)
           {
               if (b[j]==1)
                {
                    for (i=1;i<=n;i++)
                    {
                        v[i][j]*=-1;
                    }
                }
           }
           for (i=1;i<=n;i++)
           {
               if (b2[i]==1)
               {
                   for (j=1;j<=m;j++)
                   {
                       v[i][j]*=-1;
                   }
               }
           }
           for (i=1;i<=n;i++)
           {
               for (j=1;j<=m;j++)
               s=s+v[i][j];
           }
           if (s>M)
           {
            M=s;
            /*cout<<M<<"\n\n";

            for (i=1;i<=m;i++)
            {
                cout<<b[i]<<" ";
            }
            cout<<"\n";
            for (i=1;i<=n;i++)
            {
                for (j=1;j<=m;j++)
                {
                    cout<<v[i][j]<<" ";
                }
                cout<<b2[i]<<"\n";
            }
            cout<<"\n\n";*/
           }
           for (j=1;j<=m;j++)
           {
               if (b[j]==1)
                {
                    for (i=1;i<=n;i++)
                    {
                        v[i][j]*=-1;
                    }
                }
           }
           for (i=1;i<=n;i++)
           {
               if (b2[i]==1)
               {
                   for (j=1;j<=m;j++)
                   {
                       v[i][j]*=-1;
                   }
               }
           }

       }
   }
   out<<M;
}