Cod sursa(job #51399)

Utilizator Omega91Nicodei Eduard Omega91 Data 11 aprilie 2007 23:03:16
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.92 kb
#include <iostream>
#include <fstream>
using namespace std;

long a[17][17];
int n,m;

long sumalin(int x)
{
    long s;
    int i;
    s=0;
    for (i=1; i<=m; i++)
        s+=a[x][i];
    return s;
}
long sumacol(int x)
{
    long s;
    int i;
    s=0;
    for (i=1; i<=n; i++)
        s+=a[i][x];
    return s;
}

int main()
{
    //FILE *f1;
    //f1=fopen("flip.in", "r");
    ifstream f1("flip.in");
    ofstream f2("flip.out");
    int i, j, k;
    long long su;
    bool stop;
    //fscanf(f1, "%d %d", &n, &m);
    f1>>n>>m;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            f1>>a[i][j];
            //fscanf(f1, "%d", &a[i][j]);
    for (i=1; i<=n; i++)
    {
        a[i][0]=sumalin(i);
        //f2<<a[i][0]<<" ";
    }
    //f2<<endl;
    for (i=1; i<=m; i++)
    {
        a[0][i]=sumacol(i);
        //f2<<a[0][i]<<" ";
    }
    
    //pana aici verificat :P
    stop=false;
    while (!stop) {
        stop=true;  
        for (i=1; i<=n; i++)
            if (a[i][0]<0) {
                stop=false;
                //f2<<a[i][0]<<" ";
                a[i][0]*=-1;
                //f2<<a[i][0]<<endl;
                for (j=1; j<=m; j++) {
                    a[0][j]=a[0][j]-2*a[i][j];
                    a[i][j]*=-1; //linia asta poate fii scoasa
                }
            }
        for (i=1; i<=m; i++)
            if (a[0][i]<0) {
                stop=false;
                //f2<<a[0][i];
                a[0][i]*=-1;
                //f2<<a[0][i];
                for (j=1; j<=n; j++) {
                    a[j][0]=a[j][0]-2*a[j][i];
                    a[j][i]*=-1;
                }
            }
    }
    
//    for (i=0; i<=n; i++) {
//        for (j=0; j<=m; j++)
//            f2<<a[i][j]<<" ";
//        f2<<endl;
//    }
//    f2<<endl;
    stop=false;
    while (!stop) {
        stop=true;
        for (i=1; i<=n; i++)
            for (j=1; j<=m; j++)
                if ((a[i][0] + a[0][j] - 2 * a[i][j]) < 0) {
//                    f2<<i<<" "<<j<<" "<<endl;
                    stop=false;
                    a[0][j]=(-1)*a[0][j]+2*a[i][j];
                    a[i][0]=(-1)*a[i][0]+2*a[i][j];
                    for (k=1; k<=n; k++)
                        a[k][j]*=-1;
                    for (k=1; k<=m; k++)
                        a[i][k]*=-1;

//                    for (i=0; i<=n; i++) {
//                        for (j=0; j<=m; j++)
//                            f2<<a[i][j]<<" ";
//                        f2<<endl;
//                    }
                } 
    }
    
    /*for (i=1; i<=n; i++) {
        for (j=1; j<=m; j++)
            f2<<a[i][j]<<" ";
        f2<<endl;
    }*/
    su=0;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            su+=a[i][j];
    //su=0;
    //su+=a[n][m];
    f2<<su<<endl;
    //fclose(f1);
    f1.close();
    f2.close();
    return 0; 
}