Cod sursa(job #1697878)

Utilizator perjulucianPerju Lucian Ionut perjulucian Data 3 mai 2016 02:52:40
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>


std::ifstream infile("flip.in");
std::ofstream outfile("flip.out");

int N, M;

int lastSwaps[16];

int MAX = -30000;


void read(int matrix[16][16]){
	infile >> N >> M;

	int tmp;


	for(int i = 0 ; i < N ; ++i){
		
		for(int j = 0 ; j < M ; ++j){
			infile >> tmp;
			matrix[i][j] = tmp;
		}
	}

}
void print(int matrix[16][16]){
	for(int i = 0 ; i < N ; ++i){
		std::cout << "\n";
		for(int j = 0 ; j < M ; ++j){
			std::cout << matrix[i][j] << " ";
		}
	}
}

int flipSum(int matrix[16][16]){
	int sum = 0;
	int tmpSum ;
	for(int j = 0 ; j < M ; ++j){
		tmpSum = 0;
		for(int i = 0 ; i < N ; ++i){
			tmpSum += matrix[i][j];
		}
		if(tmpSum < 0){
			sum -= tmpSum ;
		}else{
			sum += tmpSum;
		}
	}
	return sum;
}



void swapRows(int data[],int matrix[16][16]){
	for(int i = 0; i < N ; ++i){
		if(data[i] == 1){
			for(int j = 0 ; j < M ; ++j){
				matrix[i][j] *= -1;
			}
		}
	}
	int flipSuma = flipSum(matrix); 
	if (MAX < flipSuma){
		MAX = flipSuma;
	}
}



void getSwaps(int data[],int index,int size,int matrix[16][16]){
	if(index == size){
		swapRows(data,matrix);
		return ;
	}
	getSwaps(data,index + 1 , size, matrix);
	data[index] = (data[index] + 1 ) % 2;
	getSwaps(data,index + 1 , size, matrix);
}


int main(){
	int matrix[16][16];
	read(matrix);
	//print();	
	int data[N];// in order to not swap like crazy, let' memoize the last swaps shape
	
	for(int i = 0 ; i < N ; ++i){
		data[i] = 0; //unswapped
	}
	getSwaps(data,0,N,matrix);
	
	outfile << MAX;
	infile.close();
	outfile.close();
	return 0;

}