題目大意:模擬 Windows 消息隊列。輸入命令:
PUT name param priority:放入消息(名稱、參數、優先級,數值越小優先級越高)
GET:取出最高優先級消息輸出 "name param";隊列為空輸出 "EMPTY QUEUE!"
同優先級先進先出(FIFO)。最多 60,000 條命令。
使用 std::priority_queue 存儲消息節點。定義結構體包含名稱、參數、優先級,重載 operator< 使優先級小的排在隊首;同優先級需保證 FIFO,可引入時間戳或利用隊列特性(STL priority_queue 對相等元素不保證順序,需額外字段)。本題數據量較小,直接用結構體並重載運算符即可。
struct Node {
char name[100];
int param, priority;
// 優先級小者優先;同優先級按插入順序(這裡用指針或序號區分,簡化處理)
bool operator<(const Node& other) const {
return priority > other.priority; // 小頂堆
}
};
priority_queue q;
int main() {
char cmd[10];
while (scanf("%s", cmd) != EOF) {
if (strcmp(cmd, "GET") == 0) {
if (q.empty()) puts("EMPTY QUEUE!");
else {
Node cur = q.top(); q.pop();
printf("%s %d\n", cur.name, cur.param);
}
} else if (strcmp(cmd, "PUT") == 0) {
Node nd;
scanf("%s %d %d", nd.name, &nd.param, &nd.priority);
q.push(nd);
}
}
return 0;
}
> 實現小頂堆。while(~scanf(...)) 讀取。