MELE2 - ELEVATOR II
Tác giả: khuc_tuan
Ngôn ngữ: Pascal
// {$APPTYPE CONSOLE}
{$mode delphi}
uses math, sysutils;
const
maxq = 1000000;
var
res, h : int64;
a, b, c : integer;
f : array[0..100000] of int64;
q : array[0..maxq] of integer;
u, v, i, le, ri : integer;
procedure add(x : integer);
begin
inc(ri);
if ri > maxq then ri := 1;
q[ri] := x;
end;
function del : integer;
begin
del := q[le];
if le = ri then
begin
le := 1;
ri := 0;
end
else
begin
inc(le);
if le > maxq then le := 1;
end;
end;
begin
read(h,a,b,c);
for i:=0 to a-1 do f[i] := h + 1;
f[0] := 0;
add(0);
while ri <> 0 do
begin
u := del;
v := (u+b) mod a;
if f[v] > f[u] + b then
begin
f[v] := f[u] + b;
add(v);
end;
v := (u+c) mod a;
if f[v] > f[u] + c then
begin
f[v] := f[u] + c;
add(v);
end;
end;
res := 0;
for i:=0 to a-1 do if f[i] < h then
begin
res := res + ( h - 1 - f[i] ) div a + 1;
end;
writeln(res);
end.