POJ 2051 -- Argus(优先队列)
题目:http://poj.org/problem?id=2051
题目大意:
这道题就是个最小堆,把最先到达的query输出query编号,然后继续排队等待同样的时间,
要是某几个请求同时到达的话,就要按照编号从小到大的输出。
思路:
先定义一个结构体,里面包含 query的 id 和 time,然后将query放进优先队列里,变可以
轻松解决问题。
AC代码:
1 #include<cstdio>
2 #include<iostream>
3 #include<queue>
4 using namespace std;
5
6 struct Info
7 {
8 int time;
9 int time1;
10 int id;
11 bool operator<(const Info &I) const
12 {
13 if(I.time!=time)
14 return I.time<time;
15 else
16 return I.id<id;
17 }
18 };
19
20 priority_queue<Info>Q;
21
22 int main()
23 {
24 char str[10],c[2];
25 Info temp;
26 int i,n;
27 while(scanf("%1s",&c)&&c[0]!='#')
28 {
29 scanf("%s %d %d",&str,&temp.id,&temp.time);
30 temp.time1=temp.time;
31 Q.push(temp);
32 }
33 scanf("%d",&n);
34 while(n--)
35 {
36 temp=Q.top();
37 printf("%d\n",temp.id);
38 temp.time+=temp.time1;
39 Q.pop();
40 Q.push(temp);
41 }
42 return 0;
43 }