POJ - 1338 Ugly Numbers-STL的灵活运用
2015-07-28 17:03
453 查看
POJ - 1338 Ugly Numbers
Description Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... shows the first 10 ugly numbers. By convention, 1 is included. Given the integer n,write a program to find and print the n'th ugly number. Input Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0. Output For each line, output the n’th ugly number .:Don’t deal with the line with n=0. Sample Input 1 2 9 0 Sample Output 1 2 10 map拥有自动排序的强大功能 /* Author: 2486 Memory: 680 KB Time: 16 MS Language: G++ Result: Accepted */ #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <map> #include <iterator> using namespace std; typedef long long LL; const int maxn=1500+5; int S[]= {2,3,5}; LL dp[maxn]; priority_queue<LL,vector<LL>, greater<LL> >G; map<LL,int>P; int n; void pri() { G.push(1); P[1]=1; int cnt=0; while(true) { LL a=G.top(); G.pop(); cnt++; if(cnt>1500+4)break; for(int i=0; i<3; i++) { LL b=a*S[i]; if(!P[b]) { P[b]=1; G.push(b); } } } map<LL,int>::iterator it; cnt=1; for(it=P.begin(); it!=P.end(); it++) { dp[cnt++]=it->first; if(cnt>1500)return; } } int main() { pri(); while(~scanf("%d",&n),n) { printf("%I64d\n",dp ); } return 0; } [/code] |
相关文章推荐
- Unity协程(Coroutine)原理深入剖析再续
- 分析java.lang.NullPointerException thrown in RelativeLayout measure()
- 获取SQLSERVER所有库 所有表 所有列 所有字段信息
- 深入解读CSS的OOCSS和SMACSS以及BEM
- Primeton EOS开发配置
- Java无限级树(递归)超实用
- 人脸数据库对比 Comparison of facial image datasets
- [不明所以]android 5.0 couldn't find "libmsc.so"
- 如何理解Hibernate中的HibernateSessionFactory类
- 白话空间统计之:空间异质性
- Core Animaiton - 5
- Activity的两种启动方式
- [不明所以]android 5.0 couldn't find "libmsc.so"
- Unity笔记 SPACE SHOOTER 实例详解
- vs2005 为函数自动添加注释
- Grunt 新手一日入门
- madplay 的移植和使用
- 如何保护你的家用路由器?
- poj3621 最优比例生成环
- Unity时钟定时器插件——Vision Timer源码分析之一