Cod sursa(job #279317)

Utilizator chibicitiberiuChibici Tiberiu chibicitiberiu Data 12 martie 2009 19:33:43
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<fstream>
#define sizelimit 17
using namespace std;

int array[sizelimit][sizelimit],tarray[sizelimit][sizelimit], n, m;
long long sum, sumpos, sumneg;

void read()
{
    ifstream in ("flip.in");
    in>>n>>m;
    for (int i=0;i<n;i++)
         for (int j=0;j<m;j++)
              in>>array[i][j];
    in.close();
}

void comutalinia(int linia)
{
    for (int i=0;i<m;i++)
        array[linia][i]*=-1;
}

void comutacoloana(int coloana)
{
    for (int i=0;i<n;i++)
        array[i][coloana]*=-1;
}

void testlinia()
{
    for (int i=0;i<n;i++) {
        sumpos=0; sumneg=0;
        for (int j=0;j<m;j++) {
            if (array[i][j]>0) sumpos+=array[i][j];
            else if (array[i][j]<0) sumneg+=array[i][j]*(-1);
        }
        if (sumneg > sumpos) comutalinia(i);
    }
}

void testcoloana()
{
    for (int j=0;j<m;j++) {
        sumpos=0; sumneg=0;
        for (int i=0;i<n;i++) {
            if (array[i][j]>0) sumpos+=array[i][j];
            else if (array[i][j]<0) sumneg+=array[i][j]*(-1);
        }
        if (sumneg > sumpos) comutacoloana(j);
    }
}

void suma()
{
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
            sum+=array[i][j];
}

int main()
{
    long long temp;
    read();
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
            tarray[i][j]=array[i][j];
    testlinia();
    testcoloana();
    suma();
    temp=sum;
    sum=0;

    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
            array[i][j]=tarray[i][j];

    testcoloana();
    testlinia();
    suma();

    ofstream out ("flip.out");
    if (sum>temp) out<<sum;
    else out<<temp;
    out.close();

    return 0;
}