Cod sursa(job #1024779)

Utilizator ehoratiuEppel Horatiu ehoratiu Data 9 noiembrie 2013 01:04:08
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.31 kb
/*Gigel a descoperit un nou joc pe care l-a numit "Flip". Acesta se joaca pe o tabla dreptunghiulara de dimensiuni N*M care contine numere intregi. Fiecare linie si fiecare coloana are un comutator care schimba starea tuturor elementelor de pe acea linie sau coloana, inmultindu-le cu -1. Scopul jocului este ca pentru o configuratie data a tablei de joc sa se actioneze asupra liniilor si coloanelor astfel incat sa se obtina o tabla cu suma elementelor cat mai mare.

Cerinta
Dandu-se o configuratie pentru tabla "Flip", realizati un program care sa determine suma maxima pe care Gigel o poate obtine.

Date de Intrare
Prima linie a fisierului flip.in contine doua numere intregi N si M, separate prin cate un spatiu, care reprezinta dimensiunea tablei. Urmatoarele N linii contin cate M numere intregi seperate prin cate un spatiu care descriu configuratia tablei de joc.

Date de Iesire
Prima linie a fisierului flip.out contine un numar care va reprezenta suma maxima pe care Gigel o poate obtine comutand liniile si coloanele tablei de joc.

Restrictii si precizari
1 ≤ N, M ≤ 16
Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]*/

#include <stdio.h>
#include <stdlib.h>

FILE *fin, *fout;
int main()
{
int m,n,i,j,contor;
int a[1000][16];
    fin = fopen("flip.in","r");
    fout = fopen("flip.out","w");

    fscanf(fin,"%d %d\n", &m , &n);
    if ((m<1)||(n>16)){
        printf("date de intrare invalide");
        return 1;
    }

    for (i=0 ; i<m ; i++){
        for (j=0 ; j<n ; j++)
            fscanf(fin,"%d ", &a[i][j]);
        fscanf(fin,"\n");
    }

//Parcurgere pe linii
    for (i=0 ; i<m ; i++){
        contor = 0;
        for (j=0 ; j<n ; j++)
            contor = contor + a[i][j];
        if (contor < 0)
            for (j=0 ; j<n ; j++)
                a[i][j] = a[i][j] * -1;
    }

//Parcurgere pe coloane
   for (j=0 ; j<n ; j++){
        contor = 0;
        for (i=0 ; i<m ; i++)
            contor = contor + a[i][j];
        if (contor < 0)
            for (i=0 ; i<m ; i++)
                a[i][j] = a[i][j] * (-1);
    }
    contor=0;
    for (i=0 ; i<m ; i++){
        for (j=0 ; j<n ; j++)
            contor = contor + a[i][j];
    }

    fprintf(fout,"%d",contor);

    fclose(fin);
    fclose(fout);

    return 0;
}