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

    solution

    Đề bài: [An toàn thông tin] Chia subnet tuần tự theo nhu cầu host (VLSM đơn giản hoá)

    Một quản trị viên cần cấp phát các dải mạng con (subnet) cho nnn phòng ban từ một dải mạng lớn ban đầu, theo đúng thứ tự yêu cầu được liệt kê (không được sắp xếp lại). Đây là bài toán mô phỏng đơn giản hoá kỹ thuật VLSM, dùng cách cấp phát tuần tự kiểu bump allocator (khác với quy ước căn chỉnh nhị phân trong VLSM chuẩn) để đảm bảo kết quả xác định duy nhất.

    Cho dải mạng lớn ban đầu dạng CIDR A.B.C.D/P. Gọi địa chỉ mạng của dải này là điểm bắt đầu, và điểm kết thúc là địa chỉ cuối cùng còn nằm trong dải (địa chỉ mạng +232−P−1+ 2^{32-P} - 1+232−P−1).

    Với mỗi phòng ban, cho số lượng host tối đa cần dùng needneedneed (1≤need≤1000001 \le need \le 1000001≤need≤100000). Cần tìm độ dài tiền tố ppp lớn nhất (tức khối địa chỉ nhỏ nhất) sao cho số host sử dụng được 232−p−2≥need2^{32-p} - 2 \ge need232−p−2≥need (với 0≤p≤300 \le p \le 300≤p≤30).

    Việc cấp phát dùng một con trỏ current (ban đầu bằng địa chỉ mạng của dải lớn):

    1. Tính ppp như trên, khối có kích thước 232−p2^{32-p}232−p địa chỉ.
    2. Dải con được cấp = từ current đến current + 2^{32-p} - 1.
    3. Nếu địa chỉ cuối của dải con này vượt quá điểm kết thúc của dải lớn: phòng ban đó không được cấp phát, in ra OVERFLOW, và current giữ nguyên (không cộng dồn) cho lượt tiếp theo.
    4. Nếu không vượt quá: in ra <network>/<p> <broadcast> của dải con vừa cấp, sau đó cập nhật current = broadcast + 1 cho lượt tiếp theo.

    Ví dụ:

    Input:

    192.168.1.0/24
    4
    100
    50
    10
    200
    

    Output:

    192.168.1.0/25 192.168.1.127
    192.168.1.128/26 192.168.1.191
    192.168.1.192/28 192.168.1.207
    OVERFLOW
    

    (Yêu cầu 100 host ⇒p=25\Rightarrow p=25⇒p=25 (126 host khả dụng); 50 host ⇒p=26\Rightarrow p=26⇒p=26 (62 host); 10 host ⇒p=28\Rightarrow p=28⇒p=28 (14 host); yêu cầu cuối 200 host cần khối p=24p=24p=24 nhưng đã vượt quá dải /24 ban đầu nên OVERFLOW.)

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

      Dòng đầu tiên là dải mạng lớn dạng A.B.C.D/P (0≤P≤320 \le P \le 320≤P≤32).

      Dòng thứ hai là số nguyên nnn (1≤n≤1001 \le n \le 1001≤n≤100) — số phòng ban.

      nnn dòng tiếp theo, mỗi dòng một số nguyên needneedneed (1≤need≤1000001 \le need \le 1000001≤need≤100000) theo đúng thứ tự cấp phát.

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

      In ra nnn dòng theo đúng thứ tự phòng ban: dòng thứ iii là <network>/<p> <broadcast> nếu cấp phát thành công, hoặc OVERFLOW nếu không đủ chỗ.

    Ví dụ:

    Đầu vào:

    192.168.1.0/24
    4
    100
    50
    10
    200
    

    Đầu ra:

    192.168.1.0/25 192.168.1.127
    192.168.1.128/26 192.168.1.191
    192.168.1.192/28 192.168.1.207
    OVERFLOW
    

    Đầu vào:

    192.168.1.5/32
    1
    1
    

    Đầu ra:

    OVERFLOW
    

    Đang tải editor...