Cod sursa(job #601031)

Utilizator ion824Ion Ureche ion824 Data 4 iulie 2011 17:46:13
Problema Jocul Flip Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.85 kb
Program Flip;
   var linii,coloane:array[1..16]of int64;
       a:array[1..16,1..16]of longint;
       suma,max:int64;
       poz,m,n,i,j:integer;
       f:text;
       b:boolean;

Begin
  assign(f,'flip.in'); reset(f); readln(f,n,m);
  For i:=1 to n do
    for j:=1 to m do
      read(f,a[i,j]);
  close(f);


  For i:=1 to n do
    For j:=1 to m do
      begin
        linii[i]:=linii[i]-a[i,j];
        coloane[j]:=coloane[j]-a[i,j];
      end;

  max:=0; poz:=0;
  For i:=1 to n do if linii[i]>max then begin max:=linii[i]; poz:=i; b:=true; end;
  For i:=1 to m do if coloane[i]>max then begin max:=coloane[i]; poz:=i; b:=false; end;


  While max>0 do begin
             if b then
                    begin
                    linii[poz]:=-linii[poz];
                    For i:=1 to m do a[poz,i]:=-a[poz,i]
                    end
                else
                  begin
                  coloane[poz]:=-coloane[poz];
                  for i:=1 to n do a[i,poz]:=-a[i,poz];
                  end;

             if b then
                    for j:=1 to m do begin
                    suma:=0;
                      for i:=1 to n do
                        suma:=suma + a[i,j];
                    coloane[j]:=-suma;
                    end
                 else
                   For i:=1 to n do begin
                      suma:=0;
                      For j:=1 to m do
                        suma:=suma+a[i,j];
                   linii[i]:=-suma;
                   end;
   max:=0;
   For i:=1 to n do if linii[i]>max then begin max:=linii[i]; poz:=i; b:=true; end;
   For i:=1 to m do if coloane[i]>max then begin max:=coloane[i]; poz:=i; b:=false; end;
  end;
  suma:=0;
  For i:=1 to n do
    for j:=1 to m do
      suma:=suma+a[i,j];
   assign(f,'flip.out'); rewrite(f);
   writeln(f,suma); close(f);
 end.