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] Dead code elimination: đếm lệnh sống

    Loại mã chết (dead code elimination): một phép gán là chết nếu biến nó định nghĩa không bao giờ được dùng sau đó (và bản thân lệnh không có tác dụng phụ).

    Mỗi lệnh: def | use.... Lệnh có def = - được coi là có tác dụng phụ (ví dụ print) và luôn được giữ.

    Duyệt ngược, giữ tập biến live. Giữ lệnh nếu def = - hoặc def đang live. Khi giữ: bỏ def khỏi live rồi thêm mọi use. Lệnh không giữ bị loại (kể cả use của nó không lan truyền).

    In số lệnh còn lại sau khi loại mã chết.

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

      Dòng đầu n. n dòng: def | use....

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

      1 ≤ n ≤ 10^4.

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

      Một số nguyên: số lệnh còn sống.

    Ví dụ:

    Đầu vào:

    3
    a | 
    b | c
    - | b
    

    Đầu ra:

    2

    Giải thích:

    Lệnh 3 có def '-' (side effect, ví dụ print) dùng b → giữ, live={b}. Lệnh 2 def b đang live → giữ, live={c}. Lệnh 1 def a không live → loại. Giữ 2 lệnh.

    Đang tải editor...