标签:
2 3 -1
2 3
解题思路:用优先队列来存放美丽数,每次从队列中拿出最小的美丽数,由它扩展出三个美丽数,用set的去重功能来判断是否放入set和优先队列。依次从优先队列中出来的就是从小到大的美丽数。
#include<stdio.h>
#include<string.h>
#include<set>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
const int f[4]={2,3,5};
LL a[5500];
void prin(int n){
priority_queue<LL,vector<LL>,greater<LL> >pq;
set<LL>s;
pq.push(1);
s.insert(1);
for(int i=1;;i++){
LL tm=pq.top();
a[i]=tm;
pq.pop();
if(i>n)
break;
for(int i=0;i<3;i++){
LL x=tm*f[i];
if(!s.count(x)){//返回元素x的个数
s.insert(x);
pq.push(x);
}
}
}
}
int main(){
int n;
prin(5010);
while( scanf("%d",&n)!=EOF&&n>0){
printf("%lld\n",a[n]);
}
return 0;
}
nyoj1032——Save Princess——————【set应用】
标签:
原文地址:http://www.cnblogs.com/chengsheng/p/4385397.html