Cod sursa(job #1448313)

Utilizator BopecovBolocan Petre Cosmin Vlad Bopecov Data 6 iunie 2015 17:07:47
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>

using namespace std;

double sum_collumn(double a[16][16], int m, int j, int r){
	double suma = 0;
	for (int i = 0; i < m; i++)
		suma = suma + a[j][i]*r;
	return suma;
};

double sum_row(double a[16][16], int n, int j, int r){
	double suma = 0;
	for (int i = 0; i < n; i++)
		suma = suma + a[i][j]*r;
	return suma;
};

int main(){
	int n, m;
	double a[16][16];
	ifstream ifile("flip.in");
	ofstream ofile("flip.out");

	ifile >> n >> m;

	for (int i = 0; i < n; i++)
	for (int j = 0; j < m; j++)
		ifile >> a[i][j];

	int gata = 1;

	while (gata){
		gata = 0;
		for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++){
			if ((sum_collumn(a, m, i, -1) + 2 * a[i][j] > sum_collumn(a, m, i, 1) + 2 * a[i][j]) && ((sum_row(a, n, j, -1) + 2 * a[i][j]) >(sum_row(a, n, j, 1) + 2 * a[i][j]))){
				for (int x = 0; x < m; x++) a[i][x] *= -1;
				for (int y = 0; y < n; y++) a[y][j] *= -1;
				
			}
			else if (sum_collumn(a, m, i, -1) > sum_collumn(a, m, i, 1) && sum_row(a, n, j, -1) > sum_row(a, n, j, 1)){
				if (sum_collumn(a, m, i, -1) - sum_collumn(a, m, i, 1) > sum_row(a, n, j, -1) - sum_row(a, n, j, 1)){
					for (int y = 0; y < n; y++) a[y][j] *= -1;
					gata = 1;
				}
				else {
					for (int x = 0; x < m; x++) a[i][x] *= -1;
					gata = 1;
					
				}
			}
			else if (sum_collumn(a, m, i, -1) > sum_collumn(a, m, i, 1) && sum_row(a, n, j, -1) < sum_row(a, n, j, 1)){
				for (int x = 0; x < m; x++) a[i][x] *= -1;
				
			}
			else if (sum_collumn(a, m, i, -1) < sum_collumn(a, m, i, 1) && sum_row(a, n, j, -1) > sum_row(a, n, j, 1)){
				for (int y = 0; y < n; y++) a[y][j] *= -1;
				
			}
		}
	}
	
	double suma = 0;
	for (int i = 0; i < n; i++){
		for (int j = 0; j < m; j++)
			suma += a[i][j];
	}

	ofile << suma;
	cout.flush();

	return 0;
}