Cod sursa(job #1603043)

Utilizator Tudor0998Pentiuc Tudor Tudor0998 Data 17 februarie 2016 09:40:51
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<iostream>
#include<cstdio>
using namespace std;

    long int matrice[17][17], N, M, sPrecedent;
    void citire(int r,int c)
    {
        cin>>matrice[r][c];
        if(c<M) citire(r,c+1);
        else if(r<N) citire(r+1,1);
    }
    void verif(char m, int x)
    {
        long int s = 0;
        for(int r=1; r<=N; r++)
        {
            for(int c=1;c<=M;c++)
                s+=matrice[r][c];
        }
        if(s < sPrecedent)
            {
        if(m=='c')
        {
            for(int i=1;i<=N;i++) matrice[i][x]*=-1;
        }
        if(m=='r')
        {
            for(int i=1;i<=M;i++) matrice[x][i]*=-1;
        }
            }
        else sPrecedent = s;
    }
    void flip(char m, int x)
    {
        if(m=='c' && x<=M)
        {
            for(int i=1; i<=N; i++) matrice[i][x]*=-1;
            verif(m,x);
            if(x<M) flip(m,x+1);
            else flip('r',1);
        }
        if(m=='r' && x<N)
        {
            for(int i=1; i<=M; i++) matrice[x][i]*=-1;
            verif(m,x);
            flip(m,x+1);
        }
    }
    int main()
    {
        freopen("flip.in","r",stdin);
        freopen("flip.out","w",stdout);
        cin>>N>>M;
        citire(1,1);
        long int s = 0;
        for(int r=1; r<=N; r++)
        {
            for(int c=1;c<=M;c++)
                s+=matrice[r][c];
        }
        sPrecedent = s;
        flip('c',1);
        s = 0;
        for(int r=1; r<=N; r++)
        {
            for(int c=1;c<=M;c++)
                s+=matrice[r][c];
        }
        cout<<s;
    }