Cod sursa(job #1451331)

Utilizator cuna_christianCuna-Mic Mihai-Cristian cuna_christian Data 16 iunie 2015 19:59:42
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int n, m;

void read(int array[16][16], int *m, int *n){
    freopen("flip.in", "r", stdin);

    scanf("%d", &*m);
    scanf("%d", &*n);

    for(int i = 0; i < *m; i++)
        for(int j = 0; j < *n; j++)
            scanf("%d", &array[i][j]);
}

void check_sum_row(int array[16][16], int row, int n){
    int is = 0 , ms = 0;

    for(int i = 0; i < n; i++)
        is += array[row][i];
    for(int i = 0; i < n; i++)
        ms += array[row][i] * (-1);

    if(ms > is)
        for(int i = 0; i < n; i++)
            array[row][i] *= (-1);
}

void check_sum_col(int array[16][16], int col, int m){
    int is = 0 , ms = 0;

    for(int i = 0; i < m; i++)
        is += array[i][col];
    for(int i = 0; i < m; i++)
        ms += array[i][col] * (-1);

    if(ms > is)
        for(int i = 0; i < m; i++)
            array[i][col] *= (-1);
}

int calculate_smax(int array[16][16], int m, int n){
    int smax = 0;

    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
            smax += array[i][j];

    return smax;
}

int flip(int array[16][16], int i, int j, int m, int n, int smax){
    int saux;

    if(i < m && j < n){

        check_sum_row(array, i, n);
        check_sum_col(array, j, m);

        saux = calculate_smax(array, m , n);

        return flip(array, i+1, j+1, m, n, saux);
    } else return smax;

}

int flip_game(int array[16][16], int m, int n){
    int smax = 0;

    smax = calculate_smax(array, m, n);

    return flip(array, 0, 0, m, n, smax);

}

int main(){
    int array[16][16], n, m;

    freopen("flip.out", "w", stdout);

    read(array, &m, &n);

    printf("%d", flip_game(array, m , n));

    return 0;
}