Pagini recente » Borderou de evaluare (job #2814354) | Cod sursa (job #1727114)
#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;
}