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

    solution

    Đề bài: [Trình biên dịch] Ức chế lỗi dây chuyền theo cửa sổ token

    Một trình phân tích "ngây thơ" phát tín hiệu lỗi tại một số vị trí token (do lỗi gốc gây ra hiệu ứng dây chuyền lan sang các token lân cận). Để tránh làm người lập trình rối mắt vì hàng loạt thông báo lỗi cùng một nguyên nhân, trình biên dịch áp dụng quy tắc ức chế lỗi theo cửa sổ: một tín hiệu lỗi tại vị trí iii chỉ thực sự được báo cáo nếu không có lỗi nào đã được báo cáo trong vòng kkk token gần nhất trước đó — tức là, gọi jjj là vị trí lỗi được báo cáo gần nhất trước iii (nếu có), tín hiệu tại iii được báo cáo khi và chỉ khi jjj không tồn tại, hoặc i−j>ki - j > ki−j>k.

    Xử lý các tín hiệu lỗi theo đúng thứ tự vị trí tăng dần từ 111 đến nnn.

    Ví dụ: n=10n=10n=10 token, tín hiệu lỗi tại các vị trí 2,3,5,82,3,5,82,3,5,8, k=2k=2k=2. Vị trí 2 được báo cáo (chưa có lỗi trước đó). Vị trí 3: 3−2=1≤23-2=1 \le 23−2=1≤2 → bị ức chế. Vị trí 5: 5−2=3>25-2=3>25−2=3>2 → được báo cáo. Vị trí 8: 8−5=3>28-5=3>28−5=3>2 → được báo cáo. Tổng cộng 3 lỗi được báo cáo trong số 4 tín hiệu gốc.

    • Định dạng đầu vào:
      • Dòng 1: số nguyên nnn (0≤n≤50000 \le n \le 50000≤n≤5000) — số token.
      • Dòng 2: nnn số 0/10/10/1 cách nhau khoảng trắng, số thứ iii bằng 1 nếu có tín hiệu lỗi tại vị trí iii (dòng rỗng nếu n=0n=0n=0).
      • Dòng 3: số nguyên kkk (0≤k≤n0 \le k \le n0≤k≤n).
    • Định dạng đầu ra:

      In ra 3 dòng:

      • Dòng 1: tổng số tín hiệu lỗi gốc (tổng các giá trị 1).
      • Dòng 2: số lỗi thực sự được báo cáo sau khi ức chế.
      • Dòng 3: các vị trí (1-based) được báo cáo, theo thứ tự tăng dần, cách nhau khoảng trắng (dòng rỗng nếu không có lỗi nào).

    Ví dụ:

    Đầu vào:

    5
    0 0 0 0 0
    3
    

    Đầu ra:

    0
    0
    
    

    Đầu vào:

    10
    0 1 1 0 1 0 0 1 0 0
    2
    

    Đầu ra:

    4
    3
    2 5 8
    

    Đang tải editor...