1、UVALive 3135  Argus

  题意:有若干注册信息,每个id每经过一个周期返回一个id信息。求前k个返回信息的id。如果两个信息返回的时间点相同,则小的那个先返回。

  思路:优先队列简单应用。

 1 #include<iostream>
 2 #include<queue>
 3 #include<map>
 4 #include<cstdio>
 5 using namespace std;
 6 char s[10];
 7 struct nd
 8 {
 9     int id;
10     int v;
11     nd(int ii=0,int vv=0):id(ii),v(vv){ }
12     friend bool operator<(const nd&a, const nd&b)
13     {
14         if (a.v == b.v) return a.id > b.id;
15         else return a.v > b.v;
16     }
17 };
18 int main()
19 {
20     priority_queue<nd>q;
21     map<int, int>mp;
22     while (~scanf("%s", s))
23     {
24         if (s[0] == '#')break;
25         int id, period;
26         scanf("%d%d", &id, &period);
27         q.push(nd(id, period));
28         mp[id] = period;
29     }
30     int cnt;
31     scanf("%d", &cnt);
32     while (cnt--)
33     {
34         nd u = q.top();
35         q.pop();
36         printf("%d\n", u.id);
37         q.push(nd(u.id, u.v + mp[u.id]));
38     }
39     return 0;
40 }
View Code

相关文章: