Cod sursa(job #1727114)

Utilizator arenauserIon Ion arenauser Data 9 iulie 2016 21:15:21
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <cstring>

const char* inFile = "flip.in";
const char* outFile = "flip.out";


int flip(unsigned numLines, unsigned numCols, int* matrix)
{
    unsigned maxFlip = 1 << (numLines + numCols - 1);



    int maxSum = 0;


    for (unsigned i = 0; i < maxFlip; ++i)
    {

        auto currentSum = 0;

        for (unsigned pos = 0; pos < numLines * numCols; ++pos)
        {
            auto divResult = div(int(pos), numCols);
            auto switchSign = ((i & (1 << divResult.quot)) != 0) != ((i & (1 << (numLines + divResult.rem))) != 0);
            currentSum += switchSign ? -matrix[pos] : matrix[pos];
        }

        if (maxSum < currentSum) maxSum = currentSum; 
    }

    return maxSum;
}


int main()
{
    unsigned numLines = 0;
    unsigned numCols = 0;

    std::ifstream readFile(inFile);
    if (!readFile) return -1;

    readFile >> numLines >> numCols;

    int* matrix = new int[numLines*numCols];


    for (unsigned index = 0; index < numLines * numCols; ++index)
    {
        readFile >> matrix[index];
    }

    int sum = 0;

    if (numLines > 0 && numCols > 0)
    {
        sum = flip(numLines, numCols, matrix);
    }

    {
        std::ofstream writeFile(outFile);
        writeFile << sum;
    }

    return 0;
}