Pagini recente » Cod sursa (job #1380337) | Cod sursa (job #2834584) | Cod sursa (job #1528893) | Cod sursa (job #191914) | Cod sursa (job #2913120)
#include <iostream>
#include <fstream>
using namespace std;
// O rezolvare simpla ar fi metoda greedy!
// Presupunem ca incepem cu coloanele.
// Modificam coloanele care aduc imbunatatiri substantiale.
// Modificam liniile care aduc imbunatatiri substantiale.
// Prin imbunatatiri substantiale, ma refer la coloane care aduc o valoare
// strict mai mare decat precedenta
int N{0};
int M{0};
class Solution
{
private:
int arrIn[17][17] = {0};
int finalSum = 0;
bool checkForColumn(int column)
{
int sumNormal{0};
int sumMod{0};
for (int i = 0; i < N; i++)
{
sumNormal += arrIn[i][column];
sumMod += (-1) * arrIn[i][column];
}
return (sumMod >= sumNormal) ? true : false;
}
bool checkForRow(int row)
{
int sumNormal{0};
int sumMod{0};
for (int i = 0; i < M; i++)
{
sumNormal += arrIn[row][i];
sumMod += (-1) * arrIn[row][i];
}
if (sumMod >= sumNormal)
{
finalSum += sumMod;
return true;
}
else
{
finalSum += sumNormal;
return false;
}
// return (sumMod > sumNormal) ? true : false;
}
public:
void rezolvare(string fisierIn, string fisierOut)
{
ifstream inputFile;
ofstream outputFile;
inputFile.open(fisierIn, ios::in);
outputFile.open(fisierOut, ios::out);
inputFile >> N >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
inputFile >> arrIn[i][j];
}
// Change the columns first
for (int i = 0; i < M; i++)
{
if (checkForColumn(i))
{
for (int j = 0; j < N; j++)
{
arrIn[j][i] *= -1;
}
}
}
// Now check for row
for (int i = 0; i < N; i++)
{
if (checkForRow(i))
{
for (int j = 0; j < M; j++)
{
arrIn[i][j] *= -1;
}
}
}
// Now calculate the sum
outputFile << finalSum;
inputFile.close();
outputFile.close();
}
};
int main()
{
Solution s;
s.rezolvare("flip.in", "flip.out");
return 0;
}