Cod sursa(job #117588)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 21 decembrie 2007 18:27:07
Problema Multiplu Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.66 kb
var fi,fo:text;
    rest:array[0..2000000]of char;
    up,cif:array[0..2000000]of longint;
    coada:array[1..2000000]of longint;
    a,b,M,rst,first,last:longint;
    numar,numar1,numar2:longint;
procedure qin(vl:longint);
begin
  coada[last]:=vl;
  inc(last);
end;
procedure qout(var vl:longint);
begin
  vl:=coada[first];
  inc(first);
end;
function isempty:boolean;
begin
  if first=last then isempty:=true
                else isempty:=false;
end;
procedure solv;
begin
  while not isempty do
    begin
      qout(numar);
      numar1:=numar*10;
      numar2:=numar*10+1;
      if rest[numar1 mod M]<>'.' then
         begin
           rst:=numar1 mod M;
           qin(rst);
           up[last-1]:=first-1;
           cif[last-1]:=0;
           rest[rst]:='.'; end;
      if (numar1 mod M)=0 then exit;
      if rest[numar2 mod M]<>'.' then
         begin
           rst:=numar2 mod M;
           qin(rst);
           up[last-1]:=first-1;
           cif[last-1]:=1;
           rest[rst]:='.'; end;
      if (numar2 mod M=0) then exit;
    end;
end;
function ggt(a,b:longint):longint;
begin
  while a<>b do
    if a>b then a:=a-b
           else b:=b-a;
  ggt:=a;
end;
function kgv(a,b:longint):longint;
begin
  kgv:=a*b div ggt(a,b);
end;
procedure print(i:longint);
begin
  if i<>1 then
    begin
      print(up[i]);
      write(fo,cif[i]);
    end;
end;
begin
  assign(fi,'multiplu.in'); reset(fi);
  assign(fo,'multiplu.out'); rewrite(fo);
  read(fi,a,b);
  M:=kgv(a,b);
  first:=1; last:=1;
  qin(1); rest[1]:='.';
  solv;
  write(fo,'1');
  last:=last-1;
  print(last);
  close(fi);
  close(fo);
end.