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] Brute-force Lockout — khoá sau N lần sai

    Khoá tài khoản chống brute-force

    Sau 3 lần đăng nhập sai LIÊN TIẾP, tài khoản bị khoá trong 60 giây. Một lần đăng nhập đúng sẽ reset bộ đếm sai. Khi đang bị khoá, mọi lần thử (kể cả đúng mật khẩu) đều bị từ chối cho tới khi hết khoá.

    Mỗi dòng là một lần thử: <timestamp> <result> với result là OK (đúng pass) hoặc FAIL (sai). timestamp là Unix giây tăng dần.

    Với mỗi lần thử, in trạng thái: PASS (đăng nhập thành công), DENIED (sai mật khẩu nhưng chưa khoá), hoặc LOCKED (bị từ chối do đang khoá).

    Quy tắc khoá: ngay lần FAIL thứ 3 → khoá tới tFail3 + 60. Trong lúc khoá (now < unlockAt), mọi lần thử in LOCKED và KHÔNG đổi bộ đếm. Khi now >= unlockAt, hết khoá, bộ đếm sai về 0, xử lý bình thường.

    Dòng 1: số lần thử N.

    Ví dụ

    Input:
    4
    10 FAIL
    20 FAIL
    30 FAIL
    40 OK
    Output:
    DENIED
    DENIED
    DENIED
    LOCKED
    

    (FAIL thứ 3 lúc t=30 → khoá tới 90; t=40<90 nên OK vẫn LOCKED)

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

      Dòng 1: N. N dòng <timestamp> <OK|FAIL> (timestamp tăng dần).

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

      1 ≤ N ≤ 1000. timestamp Unix giây, không giảm.

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

      N dòng: PASS | DENIED | LOCKED.

    Ví dụ:

    Đầu vào:

    4
    10 FAIL
    20 FAIL
    30 FAIL
    40 OK

    Đầu ra:

    DENIED
    DENIED
    DENIED
    LOCKED

    Giải thích:

    FAIL thứ 3 ở t=30 khoá tới 90; t=40<90 nên LOCKED.

    Đang tải editor...