Cod sursa(job #2581757)

Utilizator GeorgeComanaGeorgian Marian Comana GeorgeComana Data 15 martie 2020 18:58:59
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector<vector<int>> flipMatrix (ifstream &f, int *n, int *m) {
    vector<vector<int>> flipM;
    f >> *n >> *m;
    for (int i = 0; i < *n; ++i) {
        vector<int> auxV;
        for (int j = 0; j < *m; ++j) {
            int aux;
            f >> aux;
            auxV.push_back(aux);
        }
        flipM.push_back(auxV);
    }
    // for (int i = 0; i < *n; ++i) {
    //     for (int j = 0; j < *m; ++j) {
    //         cout << flipM.at(i).at(j) << " ";
    //     }
    //     cout << endl;
    // }
    return flipM;
}

int sumLine(vector<vector<int>> matrix, int line, int collumn, int *n, int *m) {
    if (line) {
        int sum = 0;
        for (int i = 0; i < *m; ++i) {
            sum += matrix.at(line).at(i);
        }
        return sum;
    }
    if (collumn) {
        int sum = 0;
        for (int i = 0; i < *n; ++i) {
            sum += matrix.at(i).at(collumn);
        }
        return sum;
    }
    return 0;
}
int sumMatrix(vector<vector<int>> matrix, int *n, int *m) {
    int sum = 0;
    for (int i = 0; i < *n; ++i) {
        for (int j = 0; j< *m; ++j) {
            sum += matrix.at(i).at(j);
        }
    }
    return sum;
}

int maxMatrix(vector<vector<int>> matrix, int *n, int *m) {
    int max = sumMatrix(matrix, n, m);
    for (int i = 0; i < *n; ++i) {
        int copyMax = max - 2 * sumLine(matrix, i, 0, n, m);
        if (copyMax > max) {
            max = copyMax;
        }
    }
    for (int i = 0; i < *m; ++i) {
        int copyMax = max - 2 * sumLine(matrix, 0, i, n, m);
        if (copyMax > max) {
            max = copyMax;
        }
    }
    return max;
}
int main() {
    ifstream f("flip.in");
    ofstream g("flip.out");
    int *n = (int*) malloc(sizeof(int) * 1);
    int *m = (int*) malloc(sizeof(int) * 1);
    vector<vector<int>> flipM = flipMatrix(f, n, m);
    g << maxMatrix(flipM, n, m);
    return 0;
}