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 }