Cod sursa(job #545905)

Utilizator slilverwolfRadu Ghitescu slilverwolf Data 4 martie 2011 08:57:56
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <stdio.h>
#include <stdlib.h>

void comuta_rand(int tabla[16][16], int m, int rand) {
    int i;
    for(i=0;i<m;i++) {
        tabla[rand][i]*=(-1);
    }
    return;
}

void comuta_coloana(int tabla[16][16], int n, int coloana) {
    int i;
    for(i=0;i<n;i++) {
        tabla[i][coloana]*=(-1);
    }
    return;
}

int calc_suma_comut(int tabla[16][16], int n, int m, int dir, int nr) {
    int suma=0,i;
    if(dir==1) { //coloana
        for(i=0;i<n;i++) {
            suma+=tabla[i][nr] * (-1);
        }
        return suma;
    } else { //rand
        for(i=0;i<m;i++) {
            suma+=tabla[nr][i] * (-1);
        }
        return suma;
    }
}

void verifica_rand(int tabla[16][16], int n, int m, int rand) {
    int suma_normala=0, suma_comut=0,i;
    suma_comut=calc_suma_comut(tabla,n,m,0,rand);
    for(i=0;i<m;i++) {
        suma_normala+=tabla[rand][i];
    }
    if(suma_normala<suma_comut) {
        comuta_rand(tabla,m,rand);
    }
    return;
}

void verifica_coloana(int tabla[16][16], int n, int m, int coloana) {
    int suma_normala=0, suma_comut=0,i;
    suma_comut=calc_suma_comut(tabla,n,m,1,coloana);
    for(i=0;i<n;i++) {
        suma_normala+=tabla[i][coloana];
    }
    if(suma_normala<suma_comut) {
        comuta_coloana(tabla,n,coloana);
    }
    return;
}



int main() {
    int tabla[16][16], n, m,i,j;
    int suma=0;
    FILE *in;
    in=fopen("flip.in","r");
    fscanf(in,"%d",&n);
    fscanf(in,"%d",&m);
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            fscanf(in,"%d",&tabla[i][j]);
        }
    }
    for(i=0;i<n;i++){
        verifica_rand(tabla,n,m,i);
    }
    for(i=0;i<m;i++) {
        verifica_coloana(tabla,n,m,i);
    }
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            suma+=tabla[i][j];
        }
    }
    in=fopen("flip.out","w+");
    fprintf(in,"%d",suma);
    fclose(in);
    return 0;

}