Cod sursa(job #1159512)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 29 martie 2014 17:43:53
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include <cstdio>

using namespace std;
int n,m,i,aux,v[16][16],j,min=0,k,ok,sum=0,sumc[16],suml[16],c[16][2],l[16][2];
void functie()
{
    if(ok==0)
    {       for(i=0;i<n;i++)
        {
            if(v[i][min]<0)
            {
                l[i][0]+=v[i][min];
                l[i][1]-=v[i][min];
            }
            else
            {
                l[i][0]-=v[i][min];
                l[i][1]-=v[i][min];
            }
            if(l[i][0]<min) {min=i;ok=1;}
        }
        aux=c[min][0];
        c[min][0]=c[min][1];
        c[min][1]=aux;

        if(c[j][0]<min) {min=j;ok=0;}
    }
    else
    {
        for(j=0;j<m;j++)
        {
            if(v[min][j]<0)
            {
                c[j][0]-=v[min][j];
                c[j][1]-=v[min][j];
            }
            else
            {
                c[j][0]-=v[min][j];
                c[j][1]-=v[min][j];
            }
            if(c[j][0]<min) {min=j;ok=0;}
        }
        aux=l[min][0];
        l[min][0]=l[min][1];
        l[min][1]=aux;
        if(l[i][0]<min) {min=i;ok=1;}
   if(ok==0)
    {   if(sum+(-c[min][0])-c[min][1]>sum)
    {
        sum=sum+(-c[min][0])-c[min][1];min=1000000;
        functie();
    }
        else printf("%d",sum);
    }
    else
    {
        if(sum+(-l[min][0])-l[min][1]>sum)
        {
            sum=sum+(-l[min][0])-l[min][1];
            min=1000000;
            functie();
        }
        else printf("%d",sum);
    }
    }

}
int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
           scanf("%d",&k);
           sum+=k;
           v[i][j]=k;
           if(k<0)
           {
               l[i][0]+=k;
                c[j][0]+=k;
            }
           else
           {
               l[i][1]+=k;
                c[j][1]+=k;
           }
        }
        if(l[i][0]<min) {min=i;ok=1;}
    }
    for(j=0;j<m;j++)
    {
        if(c[j][0]<min) {min=j;ok=0;}
    }
    if(ok==0)
    {   if(sum+(-c[min][0])-c[min][1]>sum)
    {
        sum=sum+(-c[min][0])-c[min][1];min=1000000;
        functie();
    }
        else printf("%d",sum);
    }
    else
    {
        if(sum+(-l[min][0])-l[min][1]>sum)
        {
            sum=sum+(-l[min][0])-l[min][1];min=1000000;
            functie();
        }
        else printf("%d",sum);
    }
}