Cod sursa(job #1731566)

Utilizator LauraTudorTudor Laura LauraTudor Data 19 iulie 2016 11:53:48
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<stdlib.h>
#include<stdio.h>
 
long matrix[20][20],max=-1000000,workMatrix[20][20];
int n,m;

 
int main(){
    int i,j;
    FILE *fin=fopen("flip.in","r");
    FILE *fout=fopen("flip.out","w");
    fscanf(fin,"%d %d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            fscanf(fin,"%ld",&matrix[i][j]);
    if(m > n) {
	int aux;
	for(i = 0; i < m; i++) 
		for (j = i + 1; j < m ; j++){
			aux = matrix[i][j];
			matrix[i][j]=matrix[j][i];
			matrix[j][i] = aux;
		}
		aux = n;
		n = m;
		m = aux;
	}
    int flag = (1 << m) -1;
	int graterSum = 0;
	int max = 0;
			
	while (flag >= 0) {
		for ( i = 0; i< m; i++){
		int toMultiply = (flag & (1<<(m-i-1))) > 0 ? -1 : 1; 
										for ( j = 0 ; j < n; j++ ){
		workMatrix[j][i] = matrix[j][i] * toMultiply;
		}
					
	}
	
				graterSum =  0;
				for (i = 0; i < n; i++) {
					int sum = 0;
					for (j = 0; j < m; j++){	
						//System.out.print(workMatrix[i][j] + " ");
						sum += workMatrix[i][j];
					}
					graterSum += (sum > 0 ? sum : -sum);
					//System.out.println(graterSum + "\n");
				}
				//System.out.println();
				flag -- ;
				if (graterSum > max)
					max = graterSum;
				
			}
    fprintf(fout,"%ld",max);
    fclose(fin);
    fclose(fout);
    return 0;
}