Cod sursa(job #2097733)

Utilizator arcoC. Nicolae arco Data 1 ianuarie 2018 15:25:36
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.78 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>

typedef int mat;

mat **get_empty(mat rows, mat cols);
mat **read_matrix(mat rows, mat cols, FILE *from);
void free_matrix(mat **matrix, mat rows);
void tipar(mat **matrix, mat rows, mat cols, FILE *where);
int sum(int **matrix, int n, int m);
int flip_row(int **matrix, int k, int m);
int flip_col(int **matrix, int n, int k);

int main(void)
{
	FILE *in = fopen("flip.in", "r");
	FILE *out = fopen("flip.out", "w");
	if(in != NULL && out != NULL)
	{
		int n, m;
		fscanf(in, "%d%*c%d%*c", &n, &m);

		int **matrix = read_matrix(n, m, in);
		int max = 0;
		int i = 0;
		for(; i < n; i++)
		{
			int j = 0;
			for(; j < m; j++)
			{
				flip_row(matrix, i, m);
				flip_col(matrix, n, j);
				int s = sum(matrix, n, m);
				if(s > max)
				{
					max = s;
				}
				flip_row(matrix, i, m);
				flip_col(matrix, n, j);
			}
		}
		fprintf(out, "%d\n", max);

		free_matrix(matrix, n);
		fclose(in);
		fclose(out);
	}
	else
	{
		printf("Error\n");
	}


	return 0;
}

int flip_row(int **matrix, int k, int m)
{
	int i = 0;
	for(; i < m; i++)
	{
		matrix[k][i] = -matrix[k][i];
	}
}

int flip_col(int **matrix, int n, int k)
{
	int i = 0;
	for(; i < n; i++)
	{
		matrix[i][k] = -matrix[i][k];
	}
}

int sum(int **matrix, int n, int m)
{
	int s = 0;
	int i = 0;
	for(; i < n; i++)
	{
		int j = 0;
		for(; j < m; j++)
		{
			s += matrix[i][j];
		}
	}
	return s;
}

mat **read_matrix(mat rows, mat cols, FILE *from)
{
	mat **matrix = malloc(sizeof(mat *) * rows);
	if(matrix != NULL)
	{
		mat i = 0;
		for(; i < rows; i++)
		{
			mat *line = malloc(sizeof(mat) * cols);
			if(line != NULL)
			{
				mat j = 0;
				for(; j < cols; j++)
				{
					mat t = 0;
					fscanf(from, "%d%*c", &t);
					line[j] = t;
				}
				matrix[i] = line;
			}
			else
			{
				printf("Failed init line: %u\n", i);
			}
		}

		return matrix;
	}
	else
	{
		printf("matrix init error\n");
	}
}

void tipar(mat **matrix, mat rows, mat cols, FILE *where)
{
	mat i = 0;
	for(; i < rows; i++)
	{
		mat j = 0;
		for(; j < cols; j++)
		{
			fprintf(where, "%u ", matrix[i][j]);
		}
		fprintf(where, "\n");
	}
}

void free_matrix(mat **matrix, mat rows)
{
	mat i = 0;
	for(; i < rows; i++)
	{
		free(matrix[i]);
	}
	free(matrix);
}

mat **get_empty(mat rows, mat cols)
{
	mat **matrix = malloc(sizeof(mat *) * rows);
	if(matrix != NULL)
	{
		mat i = 0;
		for(; i < rows; i++)
		{
			mat *line = calloc(cols, sizeof(mat));
			if(line != NULL)
			{
				matrix[i] = line;
			}
			else
			{
				printf("Failed init line: %u\n", i);
			}
		}

		return matrix;
	}
	else
	{
		printf("matrix init error\n");
	}
}