Cod sursa(job #731454)

Utilizator florea.fmfFlorea Marius Florin florea.fmf Data 8 aprilie 2012 09:36:20
Problema Jocul Flip Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.46 kb
program infoArena002;

var
	fIn,fOut:text;
	a:array[1..20,1..20] of longint;
	n,m,i,j,s:longint;
	modified:boolean;
	
function sumLine(i:longint):longint;
	var
		s,j:longint;
	begin
		s:=0; j:=0;
		for j:=1 to m do
			s:=s+a[i,j];
		sumLine:=s;
	end;
	
function sumLineInv(i:longint):longint;
	var
		s,j:longint;
	begin
		s:=0; j:=0;
		for j:=1 to m do
			s:=s+a[i,j]*(-1);
		sumLineInv:=s;
	end;
	
function sumCol(j:longint):longint;
	var
		s,i:longint;
	begin
		s:=0; i:=0;
		for i:=1 to n do
			s:=s+a[i,j];
		sumCol:=s;
	end;
	
function sumColInv(j:longint):longint;
	var
		s,i:longint;
	begin
		s:=0; i:=0;
		for i:=1 to n do
			s:=s+a[i,j]*(-1);
		sumColInv:=s;
	end;

procedure changeLine(i:longint);
	var
		j:longint;
	begin
		for j:=1 to m do
			a[i,j]:=a[i,j]*(-1);
	end;
	
procedure changeCol(j:longint);
	var
		i:longint;
	begin
		for i:=1 to n do
			a[i,j]:=a[i,j]*(-1);
	end;
	
begin
	n:=0; m:=0; i:=0; j:=0; s:=0; modified:=false;
	
	assign(fIn,'flip.in'); assign(fOut,'flip.out');
	reset(fIn); rewrite(fOut);
	
	readln(fIn,n,m);
	for i:=1 to n do begin
		for j:=1 to m do
			read(fIn,a[i,j]);
		readln(fIn); end;
			
	repeat
		modified:=false;
		for i:=1 to n do
			if (sumLine(i)<sumLineInv(i)) then begin
				changeLine(i); modified:=true; end;
		for j:=1 to m do
			if (sumCol(j)<sumColInv(j)) then begin
				changeCol(j); modified:=true; end;
	until (modified=false);
	
	for i:=1 to n do
		for j:=1 to m do
			s:=s+a[i,j];
	
	writeln(fOut,s);
	
	close(fIn); close(fOut);
end.