Cod sursa(job #116648)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 19 decembrie 2007 09:54:47
Problema Multiplu Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.1 kb
{type pelem=^elem;
     elem=record
       info:longint;
       next:pelem;
     end;  }
var fi,fo:text;
    rest:array[0..2000000]of char;
    up,cif:array[0..2000000]of longint;
    coada:array[1..2000000]of longint;
    {first,last:pelem;}
    a,b,M,rst,first,last:longint;
    numar,numar1,numar2,rez: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 qin(vl:int64);
var p:pelem;
begin
  new(p);
  p^.info:=vl;
  p^.next:=nil;
  if first=nil then
    begin
      first:=p; last:=first; exit; end;
  last^.next:=p;
  last:=p;
end;
procedure qout(var vl:longint);
var p:pelem;
begin
  vl:=first^.info;
  p:=first;
  first:=first^.next;
  dispose(p);
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.