Cod sursa(job #1150258)

Utilizator accxelAlex Carp accxel Data 22 martie 2014 19:13:43
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>

void citesteMat(int M[16][16], int l, int c, FILE *f)
{
	for(int i=0; i<l; i++)
		for(int j=0; j<c; j++)
			fscanf(f, "%d", &M[i][j]);
	return;
}
int sumCol(int M[16][16], int idCol, int nrLin)
{
	int s=0;
	for(int i=0; i<nrLin; i++)
		s+=M[i][idCol];
	return s;
}

int sumLin(int M[16][16], int idLin, int nrCol)
{
	int s=0;
	for(int i=0; i<nrCol; i++)
		s+=M[idLin][i];
	return s;
}

int sumMat(int M[16][16], int nrLin, int nrCol)
{
	int s=0;
	for(int i=0; i<nrLin; i++)
		s+=sumLin(M, i, nrCol);
	return s;
}

void comuta(int M[16][16], char mod, int id, int nr)
{
	switch(mod)
	{
		case 'l': for(int i=0; i<nr; i++) M[id][i]=-M[id][i]; break;
		case 'c': for(int i=0; i<nr; i++) M[i][id]=-M[i][id]; break;
		default: break;
	}
    return;
}

int main()
{
	int M[16][16];
	int l,c,i;
	FILE *fi, *fo;
	fi=fopen("flip.in", "r");
	fo=fopen("flip.out", "w");
	fscanf(fi, "%d %d", &l, &c);
	citesteMat(M, l, c, fi);
	for(i=0; i<l; i++)
		if(sumLin(M, i, c)<0) comuta(M, 'l', i, c);
	for(i=0; i<c; i++)
		if(sumCol(M, i, l)<0) comuta(M, 'c', i, l);
	fprintf(fo, "%d", sumMat(M, l, c));
	return 0;
}