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 }



posted @ 2012-02-15 12:22  Chnwy  阅读(185)  评论(0编辑  收藏  举报