Cod sursa(job #2640613)

Utilizator calinc2010Calin Coroian calinc2010 Data 7 august 2020 01:24:30
Problema Jocul Flip Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <iostream>
#include <fstream>

//JOCUL FLIP

using namespace std;
int n,m;

int** readBoard(ifstream &inputFile){
    int height;
    int width;

    inputFile>>height>>width;

    n=height;
    m=width;

    int** board= new int*[n];
    for (int i = 0; i<n; i++){
        board[i]=new int[m];
        for(int j = 0; j<m; j++){
            inputFile>>board[i][j];
        }
    }
    return board;
}

void printBoard(int** board, int n, int m, ofstream &outputFile){

    int Result=0;
    for(int i = 0; i < n ; i++){
        for(int j = 0; j < m; j++){
            Result=Result+board[i][j];
            cout<<board[i][j]<<" ";
        }
        cout<<endl;
    }
    outputFile<<Result;
}
void changeLinePolarity(int** board, int lineIndex){
    for(int j = 0 ; j < m ; j++){
        board[lineIndex][j] = -board[lineIndex][j];
    }
}

void changeColumnPolarity(int** board, int columnIndex){
    for(int i = 0 ; i < n ; i++){
        board[i][columnIndex] = -board[i][columnIndex];
    }
}

int solveBoard(int** board, ofstream &outputFile){

    int negPolarity = 0;
    int posPolarity = 0;

    for(int i = 0; i<n;i++){
        for(int j = 0; j<m ;j++){
            if(board[i][j]<0){
                negPolarity+=board[i][j];
            }else{
                posPolarity+=board[i][j];
            }
            if (abs(negPolarity)>abs(posPolarity)){
                changeLinePolarity(board, i);
            }
            negPolarity = 0;
            posPolarity = 0;
        }
    }

    for(int j = 0; j<m ;j++){
            for(int i = 0; i<n ;i++){
            if(board[i][j]<0){
                negPolarity+=board[i][j];
            }else{
                posPolarity+=board[i][j];
            }
            if (abs(negPolarity)>abs(posPolarity)){
                changeColumnPolarity(board, j);
            }
            negPolarity = 0;
            posPolarity = 0;
        }
    }
    printBoard(board,n,m,outputFile);
}


int main()
{
    ifstream f("flip.in");
    ofstream g("flip.out");

    int **board;

    board = readBoard(f);
    solveBoard(board,g);
    return 0;
}