Uva 136 - Ugly Numbers
2016-07-07 14:46
423 查看
题目解析:
根据题目意思,对于每一个丑数x,2x、3x和5x也都是丑数,而最小的丑数是1,因此我们可以从1开始依次的构造出后面所有的丑数,等构造到第1500个时停止,然后输出即可。可以利用优先队列priority_queue< LL,vector,greater >,每次将队首元素x出队列,令2x、3x和5x入队列,应该注意的是每一个进过队列的值都应该做个标记,避免以不同的方式构造出的同一个数多次进入队列。
贴代码:
根据题目意思,对于每一个丑数x,2x、3x和5x也都是丑数,而最小的丑数是1,因此我们可以从1开始依次的构造出后面所有的丑数,等构造到第1500个时停止,然后输出即可。可以利用优先队列priority_queue< LL,vector,greater >,每次将队首元素x出队列,令2x、3x和5x入队列,应该注意的是每一个进过队列的值都应该做个标记,避免以不同的方式构造出的同一个数多次进入队列。
贴代码:
#include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <ctype.h> #include <iostream> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #define eps 1e-8 #define INF 0x7fffffff #define PI acos(-1.0) #define seed 31//131,1313 #define MAXV 50010 #define ALL(x) x.begin(),x.end() #define INS(x) inserter(x,x.begin()) typedef long long LL; typedef unsigned long long ULL; using namespace std; int main() { priority_queue< LL,vector<LL>,greater<LL> >Myqueue; map<LL,int>Mymap; int cnt=1; LL x=0; Myqueue.push(1); Mymap[1]=1; while(1){ x=Myqueue.top(); if(Mymap.count(x*2)==0){ Myqueue.push(x*2); Mymap[x*2]=1; } if(Mymap.count(x*3)==0){ Myqueue.push(x*3); Mymap[x*3]=1; } if(Mymap.count(x*5)==0){ Myqueue.push(x*5); Mymap[x*5]=1; } if(cnt==1500){ cout << "The 1500'th ugly number is " << x << ".\n"; break; } Myqueue.pop(); cnt++; } return 0; }
相关文章推荐
- Uva12096 集合栈计算机
- Uva 540 - Team Queue
- activity与fragment切换动画
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
- IE10 透明背景的div无法遮罩
- 转载与一位在多个知名互联网公司面试过的工程师在阿里面试的经历 由此来勉励自己。
- Hibernate5配置与使用详解
- 提升效率 Windows 10 快捷键大全
- Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...
- 欢迎使用CSDN-markdown编辑器
- android 根据文件名获取图片资源id
- linux struct utsname 结构详解是utsname 函数使用说明
- QQ物联打造H5里的“3D全景漫游”秘籍
- MyBatis持久层框架使用总结
- 深入浅出ES6(十二):代理 Proxies
- 第15周 啊哈算法 快速排序算法
- mysql explain用法
- PHP安全编码
- 非接触式IC卡、条码卡、磁道卡、接触式IC卡、芯片卡
- 获得语音播报的功能