Cod sursa(job #1204138)

Utilizator zackNicu G zack Data 2 iulie 2014 04:28:53
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <stdlib.h>

int calc_suma(int** t, int n, int m){
    int suma = 0, i, j;
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            suma += t[i][j];
        }
    }
    return suma;
}

int check_ln(int** t, unsigned line, int n, int m){
    int j;
    int suma_p = calc_suma(t, n, m);
    for(j=0;j<m;j++){
        t[line][j] = (-1) * t[line][j];
    }
    int suma_n = calc_suma(t, n, m);
    return suma_p >= suma_n ? 0 : 1;
}

int check_col(int** t, unsigned col, int n, int m){
    int j;
    int suma_p = calc_suma(t, n, m);
    for(j=0;j<n;j++){
        t[j][col] = (-1) * t[j][col];
    }
    int suma_n = calc_suma(t, n, m);
    return suma_p >= suma_n ? 0 : 1;
}

int main() {

    unsigned n, m, i, j;
    FILE * file_ptr;
    int **t;

    file_ptr = fopen("flip.in", "r");
    if(file_ptr == NULL)
        exit(EXIT_FAILURE);
    fscanf(file_ptr, "%d", &n);
    fscanf(file_ptr, "%d", &m);

    t = (int**)malloc( n* sizeof(int*));
    for(i = 0; i < n ; i++ )
    {
        t[i] = (int*)malloc( n*sizeof(int) ) ;
    }


    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            fscanf(file_ptr, "%d", &t[i][j]);
        }
    }
    fclose(file_ptr);

    //verifica liniile
    for(i=0;i<n;i++)
        if(check_ln(t, i, n, m)){
            for(j=0;j<m;j++){
                t[i][j] = (-1) * t[i][j];
            }
        }
    for(i=0;i<m;i++)
        if(check_col(t, i, n, m)){
            for(j=0;j<n;j++){
                t[j][i] = (-1) * t[j][i];
            }
        }


    file_ptr = fopen("flip.out", "w+");
    fprintf(file_ptr, "%d", (-1)*calc_suma(t, n, m));
    fclose(file_ptr);

    return 0;
}