UVALive 3135 Argus
编写一个系统执行一系列Register命令:Register Q_num Period,每个命令执行周期是Period,执行事件Q_num;如果事件同时发生,优先执行Q_num小的。
Sample Input
Register 2004 200
Register 2005 300
#
5
Sample Output
2004
2005
2004
2004
2005
#include<bits/stdc++.h>
using namespace std;
const int _max = 2e4 + 10;
char s[20];
int n;
struct Item{
int Q_num,Period,time;
bool operator < (const Item &a) const{//const必不可少,解释优先级低
return (time > a.time) || (time == a.time && Q_num > a.Q_num);
}
};
priority_queue<Item>pq;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
Item item;
while(scanf("%s",s) == 1 && s[0] != ‘#‘){
scanf("%d%d",&item.Q_num,&item.Period);
item.time = item.Period;
pq.push(item);
}
scanf("%d",&n);
for(int i = 0; i < n; ++ i){
item = pq.top(); //堆顶
pq.pop();
printf("%d\n",item.Q_num);
item.time += item.Period;//更新下一个事件的时间
pq.push(item);
}
return 0;
}
Ctrl + B
Ctrl + I
Ctrl + Q
Ctrl + L
Ctrl + K
Ctrl + G
Ctrl + H
Ctrl + O
Ctrl + U
Ctrl + R
Ctrl + Z
Ctrl + Y
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u012717411/article/details/48049245