Cod sursa(job #333870)

Utilizator sapiensCernov Vladimir sapiens Data 24 iulie 2009 13:56:20
Problema Jocul Flip Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.86 kb
Program flip;
 const nmax = 16;
       vmax = 1000000;
 var f,g:text; a:array[1..nmax,1..nmax]of -vmax..vmax;
     col:array[1..nmax]of -10*vmax..10*vmax;
     lin:array[1..nmax]of -10*vmax..10*vmax;
     m,n:byte;
 procedure initiere;
  var x,y:byte;
  begin
   assign (f,'flip.in'); reset (f);
   assign (g,'flip.out'); rewrite (g);
   readln (f,n,m);
   for x:=1 to n do begin
     for y:=1 to m do read (f,a[x,y]);
     readln (f);
   end;
  end;
 procedure col_lin;
  var x,y:byte;
  begin
   for x:=1 to n do lin[x]:=a[x,1];
   for x:=1 to n do
     for y:=2 to m do lin[x]:=lin[x]+a[x,y];
   for x:=1 to m do col[x]:=a[1,x];
   for x:=1 to m do
     for y:=2 to n do col[x]:=col[x]+a[y,x];
  end;
 procedure comutare_linie (x:byte);
  var y:byte;
  begin
   lin[x]:=-lin[x];
   for y:=1 to m do a[x,y]:=-a[x,y];
   for y:=1 to m do col[y]:=col[y]+2*a[x,y];
  end;
 procedure comutare_coloana (x:byte);
  var y:byte;
  begin
   col[x]:=-col[x];
   for y:=1 to n do a[y,x]:=-a[y,x];
   for y:=1 to n do lin[y]:=lin[y]+2*a[y,x];
  end;
 function sum:longint;
  var x:byte; y:longint;
  begin
   y:=0;
   for x:=1 to n do y:=y+lin[x];
   sum:=y;
  end;
 procedure cautare;
  var x:byte; z:boolean; w:longint;
  begin
   z:=true;
   while z do begin
     z:=false;
     for x:=1 to m do begin
       w:=sum;
       comutare_coloana (x);
       if sum>w then begin
         z:=true;
         comutare_coloana (x);
       end;
       comutare_coloana (x);
     end;
     for x:=1 to n do begin
       w:=sum;
       comutare_linie (x);
       if sum>w then begin
         z:=true;
         comutare_linie (x);
       end;
       comutare_linie (x);
     end;
   end;
  end;
 procedure incheiere;
  begin
   writeln (g,sum);
   close (f); close (g);
  end;
 begin
  initiere;
  col_lin;
  cautare;
  incheiere;
 end.