Cod sursa(job #1204139)

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

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

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

int main() {

    unsigned n, m, i, j;
    FILE * file_ptr;
    long **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 = (long**)malloc( n* sizeof(long*));
    for(i = 0; i < n ; i++ )
    {
        t[i] = (long*)malloc( n*sizeof(long) ) ;
    }


    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            fscanf(file_ptr, "%ld", &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, "%ld", (-1)*calc_suma(t, n, m));
    fclose(file_ptr);

    return 0;
}