Cod sursa(job #1024790)

Utilizator ehoratiuEppel Horatiu ehoratiu Data 9 noiembrie 2013 01:23:04
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.41 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;
    long contor,a[100][100];
    fin = fopen("flip.in","r");
    fout = fopen("flip.out","w");

    fscanf(fin,"%d %d\n", &n , &m);
    if ((n>=1)||(m<=16))
    {
        for (i=0 ; i<m ; i++)
        {
            for (j=0 ; j<n ; j++)
                fscanf(fin,"%ld ", &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,"%ld",contor);
    }
    fclose(fin);
    fclose(fout);

    return 0;
}