Bài 21.4. Quản lý hành khách xe buýt thông minh - [Độ khó: Khá]
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
: In101 202
ADD 101
:101
đã có, bỏ qua. Xe:[101, 202]
ADD 303
: Xe chưa đầy (2 < 3). Xe:[101, 202, 303]
PRINT
: In101 202 303
ADD 404
: Xe đã đầy (3 = 3). Loại bỏ khách cũ nhất (101
). Sau đó thêm404
. Xe:[202, 303, 404]
PRINT
: In202 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