Cod sursa(job #695648)

Utilizator impulseBagu Alexandru impulse Data 28 februarie 2012 13:34:51
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#include <iostream>
#define ifile "flip.in", "r"
#define ofile "flip.out", "w"
using namespace std;
FILE * f=fopen(ifile);
FILE * g=fopen(ofile);
#define TMax 17
#define COMMax 33
//    N     M            N linii
int T[TMax][TMax], N, M, L[TMax], COM[COMMax], SMax = 0;

int step1()
{
    for(int i = 0; i < COMMax; i++) COM[i] = 0;
    fscanf(f, "%d %d", &N, &M);
    for(int i = 0; i < N; i++)
        for(int j = 0; j < M; j++)
            fscanf(f, "%d", &T[i][j]),
                L[i] += T[i][j];
    return 0;
}

int sumUp()
{
    int cSum = 0;
    for(int i = 0; i < N; i++) cSum += L[i];
    if(cSum > SMax) SMax = cSum;
    return cSum;
}

int cSwitch(int c)
{
    for(int i = 0; i < N; i++)
    {
        int prev = T[i][c];
        T[i][c] *= -1;
        L[i] = L[i] - prev + T[i][c];
    }
    return 0;
}

int lSwitch(int l)
{
    int lSum = 0;
    for(int i = 0; i < M; i++)
    {
        T[l][i] *= -1;
        lSum += T[l][i];
    }
    L[l] = lSum;
    return 0;
}

int doCOM()
{
    for(int i = 0; i < COMMax; i++)
    {
        if(COM[i] == 0) { COM[i] = 1; break; }
        if(COM[i] == 1) { COM[i] = 0; COM[i + 1]++; if(COM[i + 1] == 1) break; }
        if(COM[i] == 2) { COM[i] = 0; COM[i + 1]++; if(COM[i + 1] == 1) break; }
    }
    return 0;
}

int handleCOM()
{
    for(int i = 0; i < N; i++)
        if(COM[i]) lSwitch(i);
    for(int i = 0; i < M; i++)
        if(COM[N + i]) cSwitch(i);
    return 0;
}
int printc()
{
    for(int i = 0; i < COMMax; i++)
        cout<<COM[i];
    cout<<"\n";
}
int step2()
{
    while(COM[N + M] == 0)
    {
        doCOM();
        handleCOM();
        sumUp();
        handleCOM();
    }
}

int main()
{
    step1();
    step2();
    return 0;
}