Cod sursa(job #68730)

Utilizator mlazariLazari Mihai mlazari Data 29 iunie 2007 12:45:56
Problema Jocul Flip Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.4 kb
Program Flip;
var n,m : integer;
    T : array[1..16,1..16] of longint;
    S : longint;
    L,C : array[1..16] of longint;
    change : boolean;

procedure Citeste;
var Intrare : text;
    i,j : integer;
begin
  assign(Intrare,'flip.in');
  reset(Intrare);
  readln(Intrare,n,m);
  for i:=1 to 16 do
   begin
     L[i]:=0;
     C[i]:=0;
   end;
  S:=0;
  for i:=1 to n do
   for j:=1 to m do
    begin
      read(Intrare,T[i,j]);
      L[i]:=L[i]+T[i,j];
      C[j]:=C[j]+T[i,j];
      S:=S+T[i,j];
    end;
  close(Intrare);
end;

procedure ComutaLin(nr : integer);
var i : integer;
begin
  S:=S-2*L[nr];
  L[nr]:=-L[nr];
  for i:=1 to m do
   begin
     C[i]:=C[i]-2*T[nr,i];
     T[nr,i]:=-T[nr,i];
   end;
  change:=true;
end;

procedure ComutaCol(nr : integer);
var i : integer;
begin
  S:=S-2*C[nr];
  C[nr]:=-C[nr];
  for i:=1 to n do
   begin
     L[i]:=L[i]-T[i,nr];
     T[i,nr]:=-T[i,nr];
   end;
  change:=true;
end;

procedure Calculeaza;
var i : integer;
begin
  change:=true;
  while change do
   begin
     change:=false;
     for i:=1 to n do
      if L[i]<0 then ComutaLin(i);
     for i:=1 to m do
      if C[i]<0 then ComutaCol(i);
   end;
end;

procedure Scrie;
var Iesire : text;
begin
  assign(Iesire,'flip.out');
  rewrite(Iesire);
  write(Iesire,S);
  close(Iesire);
end;

begin
  Citeste;
  Calculeaza;
  Scrie;
end.