[Buổi 3][Chuyên đề 01: Phân tích bài toán & chọn cấu trúc][ADV] Bài 1: Điều phối tác vụ động
Điều phối tác vụ động
Bối cảnh và bài toán
Một nền tảng tính toán duy trì danh sách các tác vụ đang chờ xử lý. Trong lúc hệ thống hoạt động, mức ưu tiên của một tác vụ có thể thay đổi; tác vụ cũng có thể bị hủy trước khi chạy. Đồng thời, bảng giám sát cần trả lời nhanh tác vụ nào đang quan trọng nhất và trạng thái hiện tại của một id bất kỳ.
Mỗi tác vụ có một id và một priority. Hệ thống hỗ trợ các lệnh:
ADD id priority: thêm một tác vụ mới. Mỗiidchỉ xuất hiện trong lệnhADDnhiều nhất một lần trong toàn bộ input.SET id priority: đổi mức ưu tiên của một tác vụ đang hoạt động.CANCEL id: hủy một tác vụ đang hoạt động.STATUS id: nếu tác vụ còn hoạt động, inpriorityhiện tại; ngược lại inINACTIVE.TOP: inidcủa tác vụ đang hoạt động cóprioritylớn nhất nhưng không xóa nó. Nếu không còn tác vụ, inEMPTY.RUN: inidcủa tác vụ đang hoạt động cóprioritylớn nhất rồi loại tác vụ đó khỏi hệ thống. Nếu không còn tác vụ, inEMPTY.
Nếu nhiều tác vụ có cùng priority, tác vụ có id nhỏ hơn được ưu tiên.
Các lệnh SET và CANCEL được đảm bảo chỉ áp dụng cho tác vụ đang hoạt động tại thời điểm đó.
Yêu cầu
Xử lý toàn bộ chuỗi lệnh và in đúng kết quả cho các lệnh STATUS, TOP và RUN.
Input
- Dòng 1: số lệnh
q. qdòng tiếp theo: mỗi dòng là một lệnh theo một trong sáu dạng trên.
Output
Với mỗi lệnh STATUS, TOP hoặc RUN, in một dòng kết quả tương ứng.
Ràng buộc
1 <= q <= 2 * 10^51 <= id <= 10^91 <= priority <= 10^9- Mỗi
idxuất hiện trongADDnhiều nhất một lần.
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | q <= 40, không có SET và CANCEL |
01–04 |
| S2 | 30% | q <= 3 000, không có CANCEL |
05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
12
ADD 10 5
ADD 3 5
TOP
SET 10 20
TOP
STATUS 3
CANCEL 10
TOP
RUN
TOP
STATUS 3
STATUS 10
Output
3
10
5
3
3
EMPTY
INACTIVE
INACTIVE
Giải thích. Ban đầu 3 đứng trước 10 vì cùng priority 5 nhưng id nhỏ hơn. Sau SET 10 20, tác vụ 10 trở thành ưu tiên cao nhất. Khi 10 bị hủy, 3 lại đứng đầu; RUN loại 3, nên hệ thống trở thành rỗng.
Ví dụ 2
Input
10
ADD 7 100
SET 7 50
SET 7 100
ADD 2 100
TOP
RUN
TOP
RUN
TOP
STATUS 7
Output
2
2
7
7
EMPTY
INACTIVE
Giải thích. Một tác vụ có thể được cập nhật nhiều lần, kể cả quay lại mức ưu tiên cũ. Hệ thống vẫn phải bảo đảm mỗi id chỉ được xem là một tác vụ đang hoạt động với trạng thái mới nhất.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M01-B03-ADV01 |
| Buổi | B03 |
| Loại bài | ADVANCED |
| Mức độ khó | Khó (Hard) |
| Thời gian làm bài khuyến nghị | 60 phút |
| Time limit | 2.5 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++17 |
- Yêu cầu ngoài OJ: nộp
Decision Notegiải thích operation profile, baseline, các cấu trúc ứng viên và lý do chọn phương án cuối.
Nguồn: FULLHOUSE DEV — Self-generated.
Comments