Cod sursa(job #535071)

Utilizator ladyLittle Lady lady Data 16 februarie 2011 18:47:38
Problema Jocul Flip Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.22 kb
type matrice=array[1..16,1..16] of longint;
     vector=array[1..256] of longint;

var a:matrice;
    l,c:vector;
    m,n:integer;

procedure citire(var a:matrice; var n,m:integer);
var i,j:integer;
begin
assign(input,'flip.in');reset(input);
 readln(n,m);
 for i:=1 to n do
  for j:=1 to m do begin
   read(a[i,j]);
   l[i]:=l[i]+a[i,j];
   c[j]:=c[j]+a[i,j];
  end;
close(input);
end;

procedure schimbl(i:integer);
var j:integer;
begin
 for j:=1 to m do begin
  a[i,j]:=-a[i,j];
  c[j]:=c[j]+2*a[i,j];
 end;
end;

procedure schimbc(j:integer);
var i:integer;
begin
 for i:=1 to n do begin
  a[i,j]:=-a[i,j];
  l[i]:=l[i]+2*a[i,j];
 end;
end;

var i,j:integer;
    ok:boolean;

procedure scrie;
var x,i:integer;
    s:longint;
begin
assign(output,'flip.out');rewrite(output);
s:=0;
 if n<m then begin
  for i:=1 to n do
   s:=s+l[i]
  end else
  for i:=1 to m do
   s:=s+c[i];
 write(s);
close(output);
end;

begin
citire(a,n,m);
 repeat
  ok:=true;
  for i:=1 to n do
   if l[i]<0 then begin
    l[i]:=-l[i];
    schimbl(i);
    ok:=false;
   end;
  for i:=1 to m do
   if c[i]<0 then begin
    c[i]:=-c[i];
    schimbc(i);
    ok:=false;
   end;
 until ok;
 scrie;
end.