Cod sursa(job #23301)

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

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

 if n<m 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
    x:=0;y:=0;
    for j:=1 to m 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 m do begin
    z:=0;w:=0;
    for j:=1 to n 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 m do
    tabla[inf.linie,j]:=-tabla[inf.linie,j]
   else for j:=1 to n do
    tabla[j,inf2.linie]:=-tabla[j,inf2.linie];
  end;END
 else 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
    z:=0;w:=0;
    for j:=1 to n 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 n do begin
    x:=0;y:=0;
    for j:=1 to m 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 inf2.dif>inf.dif then for j:=1 to n do
    tabla[j,inf2.linie]:=-tabla[j,inf2.linie]
   else for j:=1 to m do
    tabla[inf.linie,j]:=-tabla[inf.linie,j];
  end;END;

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

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