Cod sursa(job #2695025)

Utilizator George732George George732 Data 11 ianuarie 2021 15:41:45
Problema Jocul Flip Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <vector>
#include <fstream>
//#include "A:\Programming_languages\C++\BasicUtils\BasicUtils\Utils.h";
using namespace std;

#define vi vector<int>
#define vvi vector<vector<int>>

vvi ReadTable(string location)
{
	ifstream file(location, std::ios::in);
	int lines, cols; //n = lines, m = cols
	file >> lines >> cols;
	vvi mat(lines);
	for (int i = 0; i < lines; i++)
	{
		mat[i] = vi(cols);
		for (int j = 0; j < cols; j++)
		{
			int ti;
			file >> ti;
			mat[i][j] = ti;
		}
	}
	file.close();
	return mat;
}

void FlipLine(vvi& mat, int line)
{
	for (int i = 0; i < mat[line].size(); i++)
	{
		mat[line][i] *= -1;
	}
}
void FlipCol(vvi& mat, int col)
{
	for (int i = 0; i < mat.size(); i++)
	{
		mat[i][col] *= -1;
	}
}
int Flip(vvi& mat)
{
	//line flip
	int lines = mat.size();
	int cols = mat[0].size();
	for (int i = 0; i < lines; i++)
	{
		int sum = 0;
		for (int j = 0; j < cols; j++)
		{
			sum += mat[i][j];
		}
		if (sum < 0)
			FlipLine(mat, i);
	}
	//col flip
	for (int i = 0; i < cols; i++)
	{
		int sum = 0;
		for (int j = 0; j < lines; j++)
		{
			sum += mat[j][i];
		}
		if (sum < 0)
			FlipCol(mat, i);
	}
	int final_sum = 0;
	for (int i = 0; i < lines; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			final_sum += mat[i][j];
		}
	}
	return final_sum;
}
int main()
{
	ofstream result("flip.out", std::ios::out);
	vvi mat = ReadTable("flip.in");
	result << Flip(mat);
	result.close();
	return 0;
}