Cod sursa(job #974636)

Utilizator t.g.g.tt.g.g.t t.g.g.t Data 17 iulie 2013 20:18:37
Problema Indep Scor 95
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.77 kb
var a:array[0..1000,0..1000]of integer;
    b:array[1..500]of integer;
    c:array[0..1,1..1000,0..500]of integer;
    n,i,j,dm,i1,i2,z,l:integer;
    r:longint;

begin
  for i:=1 to 1000 do
     begin
       a[i,0]:=i;
       for j:=1 to i do
         begin
           a[i,j]:=a[j,i mod j];
         end;
     end;
  assign(input,'indep.in'); reset(input);
  readln(n);
  for i:=1 to n do readln(b[i]);
  c[1,b[1],0]:=1; c[1,b[1],1]:=1; i1:=1; i2:=0;
  for i:=2 to n do
    begin
      i1:=i2; i2:=(i2+1)and 1;
      c[i1,b[i],0]:=1; c[i1,b[i],1]:=1;
      for j:=1 to 1000 do
        begin
          dm:=a[b[i],j]; if dm=0 then dm:=a[j,b[i]];
          for z:=1 to c[i2,j,0] do
            begin
              c[i1,dm,z]:=c[i1,dm,z]+c[i2,j,z]+r; r:=0;
              if c[i1,dm,z]>9 then begin r:=c[i1,dm,z]div 10; c[i1,dm,z]:=c[i1,dm,z]mod 10; end;
            end;
          l:=c[i2,j,0];
          while r<>0 do begin inc(l); c[i1,dm,l]:=c[i1,dm,l]+r; r:=0; if c[i1,dm,l]>9 then begin r:=c[i1,dm,l]div 10; c[i1,dm,l]:=c[i1,dm,l]mod 10; end;  end;
          if l>c[i1,dm,0] then c[i1,dm,0]:=l;
          for z:=1 to c[i2,j,0] do
            begin
              c[i1,j,z]:=c[i1,j,z]+c[i2,j,z]+r;
              c[i2,j,z]:=0;
              r:=0;
              if c[i1,j,z]>9 then begin r:=c[i1,j,z]div 10; c[i1,j,z]:=c[i1,j,z]mod 10; end;
            end;
          l:=c[i2,j,0]; c[i2,j,0]:=0;
          while r<>0 do begin inc(l); c[i1,j,l]:=c[i1,j,l]+r; r:=0; if c[i1,j,l]>9 then begin r:=c[i1,j,l]div 10; c[i1,j,l]:=c[i1,j,l]mod 10; end; end;
          if l>c[i1,j,0] then c[i1,j,0]:=l;
        end;
    end;
  assign(output,'indep.out'); rewrite(output);
  if n and 1 =1 then n:=1 else n:=0;
  for i:=c[n,1,0] downto 1 do write(c[n,1,i]);
  close(output);
end.