poj 1338 优先队列

pair来表示推演树上的结点,用first表示结点的值,用second表示结点是由父结点乘以哪一个因子得到的。

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <cmath>
 6 #include <queue>
 7 #include <stack>
 8 #include <string>
 9 #include <vector>
10 #include <utility>
11 using namespace std;
12 
13 typedef pair<__int64, int> node;
14 
15 const int maxn = 1e3+505;
16 __int64 ans[maxn];
17 int n;
18 
19 void init()
20 {
21     priority_queue<node,vector<node>,greater<node> > q;
22     q.push(make_pair(1,2));
23     for(int i=1;i<=1500;i++)
24     {
25         node cur=q.top();
26         q.pop();
27         switch(cur.second)
28         {
29             case 2:
30                 q.push(make_pair(cur.first*2,2));
31             case 3:
32                 q.push(make_pair(cur.first*3,3));
33             case 5:
34                 q.push(make_pair(cur.first*5,5));
35         }
36         ans[i]=cur.first;
37     }
38 }
39 
40 int main()
41 {
42     init();
43     while(~scanf("%d",&n))
44     {
45         if(!n) break;
46         printf("%I64d\n",ans[n]);
47     }
48     return 0;
49 }

 

 

 

posted @ 2012-11-28 22:21  Missa  阅读(355)  评论(0编辑  收藏  举报