Cod sursa(job #23521)

Utilizator smith_s9Stamate Cosmin smith_s9 Data 28 februarie 2007 23:46:33
Problema Jocul Flip Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.11 kb
Program Flip;
type dom=-1000000..1000000;
     info=record
          linie:byte;
          dif:longint;end;
var f,g:text;
    inf,inf2:info;
    tabla:array [1..16,1..16] of dom;
    x,y,z,w:dom;
    i,j,n,m:byte;
    suma:longint;
Begin
assign(f,'flip.in');assign(g,'flip.out');
reset(f);rewrite(g);
read(f,n,m);suma:=0;

for i:=1 to n do
 for j:=1 to m do
  read(f,tabla[j,i]);

if m<n then begin
 inf.dif:=1;inf.linie:=1;inf2.dif:=1;inf2.linie:=1;

 while (inf.linie<>0) or (inf2.linie<>0) do begin
  inf.dif:=0;inf.linie:=0;inf2.dif:=0;inf2.linie:=0;

  for i:=1 to m do begin
   x:=0;y:=0;
   for j:=1 to n do begin
    if tabla[i,j]>0 then x:=x+tabla[i,j]
    else y:=y+(-tabla[i,j]);end;
   if (y>x) and ((y-x)>inf.dif) then begin
    inf.linie:=i;inf.dif:=y-x;end;
  end;

  for i:=1 to n do begin
   z:=0;w:=0;
   for j:=1 to m do begin
    if tabla[j,i]>0 then z:=z+tabla[j,i]
    else w:=w+(-tabla[j,i]);end;
   if (w>z) and ((w-z)>inf2.dif) then begin
    inf2.linie:=i;inf2.dif:=w-z;end;
  end;

  if inf.dif>inf2.dif then for j:=1 to n do
   tabla[inf.linie,j]:=-tabla[inf.linie,j]
  else for j:=1 to m do
   tabla[j,inf2.linie]:=-tabla[j,inf2.linie];

 End;
End;

if m>=n then begin
 inf.dif:=1;inf.linie:=1;inf2.dif:=1;inf2.linie:=1;

 while (inf.linie<>0) or (inf2.linie<>0) do begin
  inf.dif:=0;inf.linie:=0;inf2.dif:=0;inf2.linie:=0;

  for i:=1 to n do begin
   z:=0;w:=0;
   for j:=1 to m do begin
    if tabla[j,i]>0 then z:=z+tabla[j,i]
    else w:=w+(-tabla[j,i]);end;
   if (w>z) and ((w-z)>inf2.dif) then begin
    inf2.linie:=i;inf2.dif:=w-z;end;
  end;

  for i:=1 to m do begin
   x:=0;y:=0;
   for j:=1 to n do begin
    if tabla[i,j]>0 then x:=x+tabla[i,j]
    else y:=y+(-tabla[i,j]);end;
   if (y>x) and ((y-x)>inf.dif) then begin
    inf.linie:=i;inf.dif:=y-x;end;
  end;

  if inf.dif>inf2.dif then for j:=1 to n do
   tabla[inf.linie,j]:=-tabla[inf.linie,j]
  else for j:=1 to m do
   tabla[j,inf2.linie]:=-tabla[j,inf2.linie];

 End;
End;

for i:=1 to m do
 for j:=1 to n do
  suma:=suma+tabla[i,j];

Write(g,suma);close(f);close(g);
End.