https://vjudge.net/problem/UVALive-3135
题意:
你的任务是编写一个称为Argus的系统。该系统支持一个Register的命令
Register Q_num Period
该命令注册了一个触发器,它每Period秒钟就会产生一次编号为Q_num的事件。你的任务是模拟出前k个事件。如果多个事件同时发生,先处理Q_num小的事件。
思路:
题目很简单,一个优先队列解决。
1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 6 struct node 7 { 8 int Q_num, Period, Time; 9 bool operator < (const node& rhs) const 10 { 11 return Time>rhs.Time || (Time == rhs.Time && Q_num > rhs.Q_num); 12 } 13 }; 14 15 char s[10]; 16 17 int main() 18 { 19 //freopen("D:\txt.txt", "r", stdin); 20 int x, y, k; 21 priority_queue<node> q; 22 while (cin >> s) 23 { 24 if (s[0] == '#') break; 25 cin >> x >> y; 26 node u; 27 u.Q_num = x; 28 u.Period = y; 29 u.Time = y; 30 q.push(u); 31 } 32 cin >> k; 33 while (k--) 34 { 35 node u = q.top(); 36 q.pop(); 37 cout << u.Q_num << endl; 38 u.Time += u.Period; 39 q.push(u); 40 } 41 }