Cod sursa(job #413905)

Utilizator cristiprgPrigoana Cristian cristiprg Data 9 martie 2010 13:00:02
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#define DIM 32

int A[DIM][DIM], n, m;

inline int suma_linia(int i)
{
    int s = 0;
    for (int j = 1; j <= m; ++j)    s += A[i][j];
    return s;
}

void reverse_linia(int i)
{
        for (int j = 1; j <= m; ++j)    A[i][j] *= -1;
}

inline int suma_coloana(int j)
{
    int s = 0;
    for (int i = 1; i <= n; ++i)    s += A[i][j];
    return s;
}

void reverse_coloana(int j)
{
    for (int i = 1; i <= n; ++i)    A[i][j] *= -1;
}

int main()
{
    FILE *f = fopen("flip.in", "r");
    fscanf(f, "%d%d", &n, &m);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            fscanf(f, "%d", &A[i][j]);
    fclose(f);

    int gata = 0;
    while (!gata)
    {
        gata = 1;
        for (int i = 1; i <= n; ++i)
            if (suma_linia(i) < 0)
                reverse_linia(i), gata = 0;

        for (int i = 1; i <= m; ++i)
            if (suma_coloana(i) < 0)
                reverse_coloana(i), gata = 0;
    }

    int s = 0;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            s += A[i][j];

    f = fopen("flip.out", "w");
    fprintf (f, "%d\n", s);
    fclose(f);

    return 0;
}