Cod sursa(job #613996)

Utilizator Antonius74Antonius Cezar Hegyes Antonius74 Data 5 octombrie 2011 12:34:55
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
	int n, m, total = 0;
	
	ifstream indata;
	indata.open("flip.in");
	ofstream outdata;
	outdata.open("flip.out");
	
	indata>>n>>m;
	
	int mat[n][m];
	vector< vector <int> > sum; // sum[0] ist fur Spalten und sum[1] ist fur Reihen
	
	sum.resize(2);
	sum[0].resize(m);
	sum[1].resize(n);
	
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < (i==0?m:n); j++)
			sum[i][j] = 0;
	
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
		{
			indata>>mat[i][j];
			sum[0][j] += mat[i][j];
			sum[1][i] += mat[i][j];
		}
	//100% perfekt bisher
		
	for (int i = 0; i < m; i++)
		if (sum[0][i] < 0)
		{
			sum[0][i] = 0;
			
			for (int j = 0; j < n; j++)
			{
				sum[1][j] -= mat[j][i];
				
				mat[j][i] *= -1;
				sum[0][i] += mat[j][i];
				
				sum[1][j] += mat[j][i];
			}
		}	
		
	//das von oben ist OK!
		
	for (int i = 0; i < n; i++)
		if (sum[1][i] < 0)
		{
			sum[1][i] = 0;
			
			for (int j = 0; j < m; j++)
			{
				sum[0][j] -= mat[i][j];
				
				mat[i][j] *= -1;
				sum[1][i] += mat[i][j];
				
				sum[0][j] += mat[i][j];
			}
		}
	
	for (int i = 0; i < m; i++)
		total += sum[0][i];
	
	outdata<<total;
}