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.

Download