Pagini recente » Cod sursa (job #3162749) | preONI 2005 runda #1 - solutii | Cod sursa (job #641867) | Cod sursa (job #1201635) | Cod sursa (job #2913138)
#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 arrIn2[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];
}
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;
int tempSum = 0;
// --- Calculate the TEMP SUM ----------
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
inputFile >> arrIn[i][j];
arrIn2[i][j] = 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
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
tempSum += arrIn[i][j];
}
// ----------------- Now calculate another temp sum------------------------------
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
arrIn[i][j] = arrIn2[i][j];
}
// 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;
}
}
}
// 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 calculate the sum
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
finalSum += arrIn[i][j];
}
// Upload the maximum
if (finalSum <= tempSum)
finalSum = tempSum;
outputFile << finalSum;
inputFile.close();
outputFile.close();
}
};
int main()
{
Solution s;
s.rezolvare("flip.in", "flip.out");
return 0;
}