Cod sursa(job #2913120)

Utilizator silvian.gSilvian Gulica silvian.g Data 12 iulie 2022 20:06:17
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 1.95 kb
#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;
}