Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] Retry-After: Bao lâu nữa được thử lại

    Header Retry-After với Token Bucket

    Token Bucket dung lượng C, nạp R token/giây (R nguyên), đầy lúc đầu. Khi request bị DENY, server trả về header Retry-After: số giây tối thiểu (làm tròn lên) để tích đủ 1 token kể từ t. Khi ALLOW, in 0.

    Thuật toán

    Nạp token tới t. Nếu tokens >= 1: ALLOW (tokens-=1), in 0. Nếu thiếu: cần 1 - tokens token, thời gian = ceil((1 - tokens)/R).

    Ví dụ

    C=1, R=1: t=0 ALLOW→0. t=0 thiếu 1 token, cần ceil(1/1)=1.

    • Định dạng đầu vào:

      Dòng 1: C R. Dòng 2: Q. Q dòng timestamp không giảm.

    • Ràng buộc đầu vào:

      1 ≤ C ≤ 1e9; 1 ≤ R ≤ 1e6; 1 ≤ Q ≤ 1000.

    • Định dạng đầu ra:

      Q dòng: 0 nếu ALLOW, ngược lại số giây Retry-After.

    Ví dụ:

    Đầu vào:

    1 1
    2
    0
    0
    

    Đầu ra:

    0
    1

    Giải thích:

    t=0 ALLOW (in 0). t=0 còn 0 token, cần 1 token với R=1 → Retry-After=1.

    Đang tải editor...