Cod sursa(job #485266)

Utilizator falselightbogdan horia-daniel falselight Data 17 septembrie 2010 18:46:35
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <iostream>

#define MAXLENGTH 16
#define MAXWIDTH 16
#define MINVALUE -1000000
#define MAXVALUE 1000000

using namespace std;

int i, j;

int arraySum (int *array, int length)
{
    int sum = 0;

    for (i = 0; i < length; ++i)
        sum += *(array + i);

    return sum;
}

void flipSign (int *array, int length, int step)
{
    for (i = 0; i < length ; i += step)
        *(array + i) = - *(array + i);
}

int main ()
{
    ifstream f ("flip.in");
    ofstream g ("flip.out");

    int N, M, *flip, sum;
    bool a = true;

    f >> N;
    cout << N;
    g << "a";
    f >> M;

    if (N <= MAXLENGTH || M <= MAXWIDTH)
        flip = new int[N * M];
    else
    {
        g << "Error: Dimensions out of margin";
        return -1;
    }

    for (i = 0; i < N; ++i)
        for (j = 0; j < M; ++j)
        {
            f >> flip[(i * M) + j];
            if (flip[(i * M) +j] < MINVALUE || flip[(i * M) + j] > MAXVALUE)
            {
                g << "Error: Value out of margin";
                return -1;
            }
        }

    while(a)
    {
        a = false;

        for (i = 0; i < N; ++i)
        {
            sum = arraySum (flip, N * M);
            flipSign (flip + (i * N), M, 1);
            if (sum >= arraySum (flip, N * M))
                flipSign (flip + (i * N), M ,1);
            else
                a = true;
        }

        for (i = 0; i < M; ++ i)
        {
            sum = arraySum (flip, N * M);
            flipSign (flip + i, N, M);
            if (sum >= arraySum (flip, N * M))
                flipSign (flip + i, N, M);
            else
                a = true;
        }

        g << arraySum (flip, N * M);
    }


    return 0;
}