码迷,mamicode.com
首页 > 其他好文 > 详细

uvalive 3135 Argus

时间:2017-10-09 23:57:02      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:namespace   return   code   产生   优先级   cin   const   相同   priority   

https://vjudge.net/problem/UVALive-3135

题意:

有一个系统有多个指令,每个指令产生一个编号为qnum的时间,每个指令的触发间隔不相同,现在给出若干个指令,现在的任务是模拟前k个事件。

如果时间在同一时间发生,那么qnum小的先输出。

思路:

很多相同的数值在同一时刻内,数值小的先输出,那么就是求若干个中最小的,那么就可以用优先队列进行维护。

这里,因为时间范围较小,之后每个事件的时间取余,那么符合的就把一个结构体扔进优先队列,这个结构体包括了qnum,period以及time。

我们重载 < 的时候,发生时间相同的话,把qnum小的优先级调高,时间不同的话,时间在前的优先级高。

代码:

 1 #include <string>
 2 #include <iostream>
 3 #include <queue>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     int num;
 9     int pe;
10     int ti;
11 
12     bool operator < (const node& rhs) const
13     {
14         if (ti == rhs.ti) return num > rhs.num;
15         return ti > rhs.ti;
16     }
17 } a[1005];
18 
19 priority_queue<node> pq;
20 
21 int main()
22 {
23     int cnt = 0;
24 
25     string b;
26 
27     while (cin >> b)
28     {
29         if (b[0] == #) break;
30 
31         cin >> a[cnt].num >> a[cnt].pe;
32 
33         cnt++;
34     }
35 
36     int k;
37 
38     cin >> k;
39 
40     for (int i = 1;i <= 3000;i++)
41     {
42         for (int j = 0;j < cnt;j++)
43         {
44             if (i % a[j].pe == 0)
45             {
46                 node tmp = (node){a[j].num,a[j].pe,i};
47 
48                 pq.push(tmp);
49             }
50         }
51     }
52 
53     for (int i = 0;i < k;i++)
54     {
55         node tmp = pq.top();pq.pop();
56 
57         cout << tmp.num << endl;
58     }
59 
60     return 0;
61 }

 

uvalive 3135 Argus

标签:namespace   return   code   产生   优先级   cin   const   相同   priority   

原文地址:http://www.cnblogs.com/kickit/p/7643389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!