Bài 21.4. Quản lý hành khách xe buýt thông minh - [Độ khó: Khá]


LÀM BÀI

Points: 10 (partial)
Time limit: 2.0s
Memory limit: 64M

Author:
Problem type

Bài 21.4. Quản lý hành khách xe buýt thông minh - [Độ khó: Khá]

Một hệ thống quản lý xe buýt muốn tối ưu hóa lộ trình. Mỗi hành khách được đại diện bằng một mã số định danh. Khi xe buýt đón khách tại một điểm dừng, danh sách khách được thêm vào. Tuy nhiên, hệ thống cần đảm bảo không có khách trùng lặp trong danh sách hành khách hiện tại của xe buýt. Nếu một khách đã có trên xe, họ không được thêm lại. Ngoài ra, sau một chặng đường dài, hệ thống sẽ loại bỏ khách hàng cũ nhất (khách được thêm vào lâu nhất) để dành chỗ cho khách mới nếu xe buýt đã đạt đến giới hạn số lượng khách cho phép.

INPUT FORMAT

Dòng đầu tiên chứa hai số nguyên dương N (1 <= N <= 100) và CAPACITY (1 <= CAPACITY <= 50), lần lượt là số lượng thao tác và sức chứa tối đa của xe buýt. N dòng tiếp theo, mỗi dòng mô tả một thao tác:

  • ADD <id>: Thêm hành khách có mã <id> (nguyên dương, 1 <= id <= 10000) vào xe buýt. Nếu khách đã có trên xe, bỏ qua. Nếu xe đã đầy (size() == CAPACITY), loại bỏ khách cũ nhất (khách ở vị trí đầu tiên trong vector) trước khi thêm khách mới.
  • PRINT: In ra danh sách các hành khách hiện có trên xe theo thứ tự họ được thêm vào.
OUTPUT FORMAT

Sau mỗi thao tác PRINT, in ra danh sách các hành khách hiện có trên xe, cách nhau bởi dấu cách. Nếu xe buýt trống, in ra Xe buyt trong.

Ví dụ:

Input:

6 3
ADD 101
ADD 202
PRINT
ADD 101
ADD 303
PRINT
ADD 404
PRINT

Output:

101 202
101 202 303
202 303 404

Giải thích:

  • N = 6, CAPACITY = 3.
  • ADD 101: Xe: [101]
  • ADD 202: Xe: [101, 202]
  • PRINT: In 101 202
  • ADD 101: 101 đã có, bỏ qua. Xe: [101, 202]
  • ADD 303: Xe chưa đầy (2 < 3). Xe: [101, 202, 303]
  • PRINT: In 101 202 303
  • ADD 404: Xe đã đầy (3 = 3). Loại bỏ khách cũ nhất (101). Sau đó thêm 404. Xe: [202, 303, 404]
  • PRINT: In 202 303 404

Bài này yêu cầu sử dụng std::vector để mô phỏng một hàng đợi có giới hạn kích thước (tương tự std::deque nhưng dùng vector), tìm kiếm phần tử (std::find hoặc duyệt), thêm phần tử (push_back), và loại bỏ phần tử từ đầu (erase(vec.begin())).



Comments

There are no comments at the moment.

Zalo