题目大意:有若干命令,它有两个属性Q_Num,Period(周期)。按时间循序模拟前k个命令并输出他们的Q_Num,若同时发生输出Q_Num最小的值。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; struct Item { int QNum,Period,Time; bool operator < (const Item &a)const{ return a.Time < Time || (a.Time == Time && a.QNum < QNum); } }item; int main() { char s[10]; int k; priority_queue<Item> pq; while(scanf("%s",s) && s[0] != '#') { scanf("%d %d",&item.QNum,&item.Period); item.Time=item.Period; pq.push(item); } scanf("%d",&k); while(k--) { item=pq.top(); pq.pop(); printf("%d ",item.QNum); item.Time+=item.Period; pq.push(item); } return 0; }