UVA.136 Ugly Numbers (优先队列)

题意分析

如果一个数字是2,3,5的倍数,那么他就叫做丑数,规定1也是丑数,现在求解第1500个丑数是多少。

既然某数字2,3,5倍均是丑数,且1为丑数,那么不妨从1开始算起。算完之后2,3,5均为丑数,然后再从2算起,4,5,10均为丑数……直到算到第1500个即可。那么有如下的问题:

如何从算出来的丑数中取出最小的?

如何保证没有计算重复的丑数?

对于第一个问题,可以采用优先队列的方法,即有序的队列,且为升序,每次只需要取出队首元素即可。

第二个问题,可以采用STL中的set容器即可,如果发现有重复的,即count != 0 那么说明这个数字已经算出过了,就不让其加入队列即可。

代码总览

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#define nmax
using namespace std;
typedef long long LL;
const int init []= {2,3,5};
int main()
{
set<LL>s;
priority_queue<LL,vector<LL>,greater<LL> > pq;
s.insert(1);
pq.push(1);
LL x;
for(int i =1; ;++i){
x = pq.top(); pq.pop();
if(i == 1500) break;
for(int j = 0; j<3; ++j){
LL t = x * init[j];
if(s.count(t) == 0){pq.push(t); s.insert(t);}
}
}
printf("The 1500'th ugly number is %lld.\n",x);
return 0;
}

最新文章

  1. SUBLIME 添加PHP控制台
  2. [New Portal]Windows Azure Virtual Machine (19) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(1)
  3. SSIS WITH VERTICA的注意事项总结
  4. (1)quartz集群调度机制调研及源码分析---转载
  5. .net的 async 和 await
  6. android调用系统图片浏览器裁切后出现黑边
  7. SQL Server 向临时表插入数据
  8. 【iOS开发】单例模式设计(ARC &amp; MRC)
  9. 第5章 原型模式(Protype Pattern)
  10. 使用UDL文件来测试SQL Server数据库连接
  11. Android开发过程中git、repo、adb、grep等指令的使用
  12. 安装Vmware 以及 Vmware 中安装Ubuntu 以及其中问题?
  13. 纯 CSS 实现波浪效果!
  14. mongoDB rs和sh关键字的作用
  15. PHP中被忽略的性能优化利器:生成器
  16. 【Python3之字符编码】
  17. Android状态栏透明(沉浸式效果)
  18. 类LinkedList
  19. 如何以system身份运行指定的程序?
  20. 【UR #3】链式反应

热门文章

  1. editText设置最大长度
  2. 「日常训练&amp;知识学习」树的分块(王室联邦,HYSBZ-1086)
  3. Linux系统中ElasticSearch搜索引擎安装配置Head插件
  4. Qt 5 最新信号和槽连接方式以及Lambda表达式
  5. Qt-QML-QML调用C++类
  6. Python汉诺塔问题递归算法与程序
  7. [精通Python自然语言处理] Ch1 - 将句子切分为单词
  8. visionpro9.0破解
  9. CodeForces 908C. New Year and Curling 解题报告 Java
  10. ARM架构中的程序执行与调用