Cod sursa(job #1873475)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 9 februarie 2017 08:47:03
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<bits/stdc++.h>
using namespace std;

long long n, m, a[20][20], b[20], rez_poz, sum_rez = -1<<30,auxa[20][20],sum_rez1 = -1<<30;

void gen(long long n, long long length)
{
	for(int j = 0; j < length; j++) b[j] = n%2, n/=2;
	//for(int j = 0; j < length; j++) cout << b[j] << " ";
	//cout << "\n";
}
int main()
{
	ifstream cin("flip.in");
	ofstream cout("flip.out");
	cin >> n >> m;
	for (int i = 0 ; i < n; i++) for (int j = 0 ; j < m; j++) {cin >> a[i][j];auxa[i][j] = a[i][j];}
	for (long long k = 0; k < 1<<m; k++)
	{
		for (int i = 0 ; i < n; i++) for (int j = 0 ; j < m; j++) {auxa[i][j] = a[i][j];}
		gen(k, m);
		for(int j = 0; j < m; j++) 
			if(b[j]){
				for (int z = 0; z < n; z++)
				{
					auxa[z][j] *=-1;
				}
			}
		long long sum = 0;
		for (int i = 0 ; i < n; i++) for (int j = 0 ; j < m; j++) {sum += auxa[i][j];}
		if (sum > sum_rez) sum_rez = sum,rez_poz = k;
	}
	for (int i = 0 ; i < n; i++) for (int j = 0 ; j < m; j++) {auxa[i][j] = a[i][j];}
	gen(rez_poz, m);
	for(int j = 0; j < m; j++) 
			if(b[j]){
				for (int z = 0; z < n; z++)
				{
					auxa[z][j] *=-1;
				}
			}
	//for (int i = 0 ; i < n; i++) for (int j = 0 ; j < m; j++) {cout << auxa[i][j] << (j== m-1? "\n":" ");}
	sum_rez = 0;
	for (int i = 0 ; i < n; i++)
	{
		long long aux_sum = 0;
		for(int j = 0; j < m; j++)
		{
			aux_sum += auxa[i][j];
		}
		if(aux_sum < 0) sum_rez += -aux_sum;
		else sum_rez += aux_sum;
	}
	cout <<sum_rez;
}