Cod sursa(job #3300090)

Utilizator raducumihai2@gmail.comRaducu Mihai [email protected] Data 12 iunie 2025 19:31:29
Problema Jocul Flip Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

#define MAXN 16

int max_int(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    FILE* fin = fopen("flip.in", "r");
    FILE* fout = fopen("flip.out", "w");

    if (!fin || !fout) {
        fprintf(stderr, "Eroare la deschiderea fisierelor.\n");
        return 1;
    }

    int N, M;
    fscanf(fin, "%d %d", &N, &M);

    int matrix[MAXN][MAXN];

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

    int max_sum = -2100000000; // o valoare foarte mica initial

    // Pentru fiecare configuratie de inversari de linii (2^N)
    for (int mask = 0; mask < (1 << N); mask++) {
        int total_sum = 0;

        // pentru fiecare coloana calculam suma dupa inversarile de linii
        for (int col = 0; col < M; col++) {
            int col_sum = 0;

            for (int row = 0; row < N; row++) {
                int val = matrix[row][col];
                // daca linia 'row' este inversata in masca mask, inmultim cu -1
                if ((mask & (1 << row)) != 0) {
                    val = -val;
                }
                col_sum += val;
            }

            // daca suma coloanei este negativa, o inversam
            if (col_sum < 0) {
                col_sum = -col_sum;
            }

            total_sum += col_sum;
        }

        if (total_sum > max_sum) {
            max_sum = total_sum;
        }
    }

    fprintf(fout, "%d\n", max_sum);

    fclose(fin);
    fclose(fout);

    return 0;
}