Cod sursa(job #3166642)

Utilizator dragoschiDragos Chiritoiu dragoschi Data 9 noiembrie 2023 10:22:08
Problema Jocul Flip Scor 30
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>  


int matrix[17][17];

bool need_switch_row(int row, int max){
    int normal_sum = 0;
    int switch_sum = 0;

    for(int i = 0; i < max; i++){
        normal_sum += matrix[row][i];
        switch_sum -= matrix[row][i];
    }

    if( normal_sum > switch_sum){
        return 0;
    }

    return 1;
}

bool need_switch_column(int column, int max){
    int normal_sum = 0;
    int switch_sum = 0;

    for(int i = 0; i < max; i++){
        normal_sum += matrix[i][column];
        switch_sum -= matrix[i][column];
    }

    if( normal_sum > switch_sum){
        return 0;
    }

    return 1;
}

void switch_column(int column, int max){
    for(int i = 0; i < max; i++){
        matrix[i][column] = (-1)*matrix[i][column];
    }
}

void switch_row(int row, int max){
    for(int i = 0; i < max; i++){
        matrix[row][i] = (-1)*matrix[row][i];
    }
}

int main(){

    int N,M;
    int sum = 0;

    FILE *file_in;
    file_in = fopen("flip.in", "rt");
    fscanf(file_in,"%d%d",&N,&M);

    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            fscanf(file_in,"%d",&matrix[i][j]);
        }
    }
    fclose(file_in);


    for(int i = 0; i < M; i++){
        if(need_switch_column(i, N)){
            switch_column(i, N);
        }
    }

    for(int i = 0; i < N; i++){
        if(need_switch_row(i, M)){
            switch_row(i, M);
        }
    }


    for(int i = 0; i < M; i++){
        if(need_switch_column(i, N)){
            switch_column(i, N);
        }
    }


    for(int i = 0; i < N; i++){
        if(need_switch_row(i, M)){
            switch_row(i, M);
        }
    }
    
    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            sum += matrix[i][j];
        }
    }

    FILE *file_out;
    file_out = fopen("flip.out", "wt");
    fprintf(file_out,"%d\n",sum);
    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            fprintf(file_out,"%d ",matrix[i][j]);
        }
        fprintf(file_out,"\n");
    }
    fclose(file_out);

    return 0;
}