Cod sursa(job #2131817)

Utilizator vlavricVictor Lavric vlavric Data 14 februarie 2018 23:17:28
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>

typedef	struct structure
{
	long long plus, minus;
}struc;

void	readfrom(int *n, int *m, int a[20][20])
{
	FILE *f; int i, j;

	f = fopen("flip.in", "r");
	fscanf(f, "%d %d", n, m);
	for (i = 0; i < *n; i++)
		for (j = 0; j < *m; j++)
			fscanf(f, "%d", &a[i][j]);
	fclose(f);
}

void	output(long long s)
{
	FILE *g;

	g = fopen("flip.out", "w");
	fprintf(g, "%lli", s);
	fclose(g);
}

long long si = 0, sum = 0;

void	lets_sum(int n, int m, int a[20][20], int *b, int h)
{
	int i, j, k; int c[20][20];

	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			c[i][j] = a[i][j];

	for (i = 1; i <= h; i++)
		if (b[i] == 1) 
		{
			if (i > n)
			{
				for (k = 0; k < n; k++)
				{
					for (j = 0; j < m; j++)
					{
						if (j == (i - n - 1)) c[k][j] = -a[k][j];
					}
				}
			}
			else if (i <= n)
			{
				for (k = 0; k < n; k++)
				{
					for (j = 0; j < m; j++)
					{
						if (k + 1 == i) c[k][j] = -a[k][j];
					}
				}
			}			
		}
	// for (i = 0; i < n; i++)
	// {
	// 	for (j = 0; j < m; j++)
	// 		printf("%3d ", c[i][j]);
	// 	printf("\n");
	// }
	si = 0;
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			si += c[i][j];
	//printf("si = %lli\n", si);
	if (si > sum) sum = si;
}

void	black_magic(int n, int m, int a[20][20])
{
	int i, j, b[40]; int h = m + n;

	for (i = 0; i <= h; i++)
		b[i] = 0;
	while (b[0] == 0)
	{
		int k = h;
		while (b[k] == 1) { b[k] = 0; k--; }
		b[k] = 1;
		// for (i = 0; i <= h; i++)
		// 	printf("%d ", b[i]);
		// printf("\n");
		if (b[0] == 1) break;
		lets_sum(n, m, a, b, h);
		// printf("%lli\n", sum);
		//getchar();
	}
	//printf("%lli\n", sum);
	output(sum);
}

int	main(void)
{
	int n, m, a[20][20];

	readfrom(&n, &m, a);
	black_magic(n, m, a);
	return (0);
}