Cod sursa(job #116546)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 18 decembrie 2007 20:55:05
Problema Multiplu Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.66 kb
type pelem=^elem;
     elem=record
       info:int64;
       next:pelem;
     end;
var fi,fo:text;
    rest:array[1..1600000000]of byte;
    first,last:pelem;
    ma:longint;
    M,numar,numar1,numar2,rez,rst,a,b,nr:int64;
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:int64);
var p:pelem;
begin
  vl:=first^.info;
  p:=first;
  first:=first^.next;
  dispose(p);
end;
procedure solv;
begin
  while first<>nil do
    begin
      qout(numar);
      numar1:=numar*10;
      if (numar1 mod M)=0 then
         begin
           rez:=numar1;
           exit; end;
      if rest[numar1 mod M]=0 then
         begin
           qin(numar1);
           rst:=numar1 mod M;
           rest[rst]:=1; end;
      numar2:=numar*10+1;
      if (numar2 mod M=0) then
         begin
           rez:=numar2;
           exit; end;
      if rest[numar2 mod M]=0 then
         begin
           qin(numar2);
           rst:=numar2 mod M;
           rest[rst]:=1; end;
    end;
end;
function ggt(a,b:int64):int64;
begin
  while a<>b do
    if a>b then a:=a-b
           else b:=b-a;
  ggt:=a;
end;
function kgv(a,b:int64):int64;
begin
  kgv:=a*b div ggt(a,b);
end;
begin
  assign(fi,'multiplu.in'); reset(fi);
  assign(fo,'multiplu.out'); rewrite(fo);
  read(fi,a,b);
  M:=kgv(a,b);
  ma:=M; nr:=1;
  while ma<>0 do
    begin
      nr:=nr*10;
      ma:=ma div 10;
    end;
  nr:=nr div 10;
  qin(nr); rest[1]:=1;
  solv;
  writeln(fo,rez);
  close(fi);
  close(fo);
end.