例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
2015-12-22 23:35
399 查看
这里综合运用了Set 和 优先队列:
整体思路:
凡是2,3,5的倍数的都是丑数,所以可以开一个优先队列(整数越小,优先级越高),先插入1,在插入用1乘以2,3,5得到2,3,5的倍数,然后把优先队列的.top去掉,不断取top直到1500个为止:
收获:常用优先队列(整数越小,优先级越高):
priority_queue<long long ,vector<long long>,greater<long long > >pq;
整体思路:
凡是2,3,5的倍数的都是丑数,所以可以开一个优先队列(整数越小,优先级越高),先插入1,在插入用1乘以2,3,5得到2,3,5的倍数,然后把优先队列的.top去掉,不断取top直到1500个为止:
收获:常用优先队列(整数越小,优先级越高):
priority_queue<long long ,vector<long long>,greater<long long > >pq;
#include<queue> #include<cstdio> #include<vector> #include<set> using namespace std; typedef long long ll; int main() { const int cofee[] = {2,3,5}; priority_queue<ll,vector<ll>,greater<ll> >pq;//整数越小,优先级越高! set<ll>s; s.insert(1); pq.push(1); for (int i = 1; i < 1500; ++i){ ll x = pq.top(); pq.pop(); for (int j = 0; j < 3; ++j){ ll num = cofee[j] * x; if (!s.count(num)){//之所以得检测一下num是否存在,是因为pq优先队列是不能保证元素不重复的,但又不好查找,所以直接用set查找! s.insert(num); pq.push(num); } } } printf("The 1500'th ugly number is %lld.\n",pq.top()); return 0; }
相关文章推荐
- 使用jQuery发送Ajax请求
- mysql binlog系列(二)----java解析binlog
- 15.未公开的Oracle数据库秘密笔记——X$固定表介绍
- Android 资源管理 Asset 、Raw 和Drawable
- 图的深度优先遍历算法
- bzoj3275 Number
- ORCAL
- linux下进程资源的限制——struct rlimit详解
- 实验1 线性表的顺序实现
- scala习题九——文件和正则表达式
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
- 解决jQuery循环调用ajax,异步返回结果混乱
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
- 【转】Oracle - 数据库的实例、表空间、用户、表之间关系
- 14.未公开的Oracle数据库秘密笔记——10079事件和网络数据包
- 047 exam c 20-end
- (九十六)函数和结构
- (九十五)函数与C-风格字符串
- 基于GTID搭建主从
- bzoj2132 圈地计划