題目:有一個寄存器裡面有幾條指令,每個指令的運行週期已知,計算出接下來執行的前K條指令。
分析:模擬。利用優先隊列模擬即可。每次取出當前最小的指令,然後計算下次執行時間,并插入隊列即可。
說明:也可以利用多個隊列和一組隊列指針實現。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
typedef struct _Item
{
int Period, Q_num, Cost;
bool operator < (const _Item& a) const {
return Cost > a.Cost || (Cost == a.Cost && Q_num > a.Q_num);
}
}Item;
int main()
{
priority_queue<Item> Q;
string in;
Item item;
int K, T;
while (cin >> in && in != "#") {
cin >> item.Q_num >> item.Period;
item.Cost = item.Period;
Q.push(item);
}
cin >> K;
for (int i = 0; i < K; ++ i) {
item = Q.top();Q.pop();
cout << item.Q_num << endl;
item.Cost += item.Period;
Q.push(item);
}
return 0;
}