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] Sliding Window Counter (xấp xỉ có trọng số)

    Sliding Window Counter

    Kỹ thuật xấp xỉ kết hợp Fixed Window: lưu số đếm của cửa sổ trước (prev) và cửa sổ hiện tại (cur), độ dài mỗi cửa sổ W. Khi request đến tại t thuộc cửa sổ hiện tại, ước lượng số request gần đây:

    estimated = cur + prev * (W - offset) / W

    với offset = t mod W. Nếu floor(estimated) < N thì ALLOW (tăng cur), ngược lại DENY. Khi sang cửa sổ liền kề thì prev = cur, cur = 0; nhảy xa hơn thì prev = 0, cur = 0.

    Thuật toán

    Dùng số học số nguyên: so sánh floor((cur*W + prev*(W-offset)) / W) < N.

    Ví dụ

    W=10,N=2: nếu cửa sổ trước có 2 và đang ở đầu cửa sổ mới thì ước lượng cao → dễ DENY.

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

      Dòng 1: W N. Dòng 2: Q. Q dòng timestamp không giảm.

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

      1 ≤ W ≤ 1000; 1 ≤ N ≤ 1000; 1 ≤ Q ≤ 1000.

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

      Q dòng ALLOW/DENY.

    Ví dụ:

    Đầu vào:

    10 2
    5
    0
    1
    2
    10
    11
    

    Đầu ra:

    ALLOW
    ALLOW
    DENY
    DENY
    ALLOW

    Giải thích:

    Cửa sổ 1 nhận 2 request rồi DENY; sang cửa sổ 2 (t=10,11) prev=2 nên ước lượng cao, request bị chặn sớm.

    Đang tải editor...