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

    solution

    Đề bài: [Hệ điều hành] Nén bộ nhớ (Compaction)

    Bộ nhớ là một dải liên tục gồm các khối xếp theo địa chỉ tăng dần, mỗi khối hoặc đã cấp phát (U) hoặc trống (F). Nén bộ nhớ (compaction) dồn tất cả các khối đã cấp phát về đầu bộ nhớ (giữ nguyên thứ tự tương đối của chúng), gộp toàn bộ vùng trống thành một lỗ duy nhất ở cuối.

    Cho mô tả bộ nhớ gồm N khối (mỗi khối: trạng thái U/F và kích thước). Hãy:

    1. Tính tổng kích thước các khối đã cấp phát (used) và tổng vùng trống (freeTotal).
    2. Sau nén: có một lỗ trống duy nhất kích thước freeTotal bắt đầu tại địa chỉ used.
    3. Đếm số lần di chuyển khối = số khối U mà địa chỉ bắt đầu của nó thay đổi sau khi nén (so với trước).

    In ra ba số cách nhau dấu cách: used, freeTotal, số khối phải di chuyển.

    Ví dụ: khối [U 4, F 2, U 3]. used=7, free=2. Sau nén U4 ở [0,4) (không đổi), U3 dời từ [6,9) về [4,7) (đổi). Di chuyển=1.

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

      Dòng đầu: N (số khối). N dòng tiếp, mỗi dòng: trạng thái (U hoặc F) và kích thước.

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

      1 ≤ N ≤ 100000; 1 ≤ kích thước ≤ 10^6.

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

      Ba số: tổng đã cấp phát, tổng vùng trống, số khối U phải di chuyển.

    Ví dụ:

    Đầu vào:

    3
    U 4
    F 2
    U 3
    

    Đầu ra:

    7 2 1

    Giải thích:

    used=4+3=7, free=2. Sau nén: U(4) giữ [0,4); U(3) từ [6,9) dời về [4,7) nên di chuyển. Số di chuyển=1.

    Đang tải editor...