Uva136-Ugly Numbers-丑数-set集合和优先队列的运用
来源:互联网 发布:江东陆伯言 知乎 编辑:程序博客网 时间:2024/06/04 17:54
题目:
丑数是指不能被2,3,5以外的其他素数整除的数。把丑数从小到大排列起来,结果如 下: 1,2,3,4,5,6,8,9,10,12,15,… 求第1500个丑数。
分析:
第一个丑数是1,而对于任意丑数x,2x、3x和5x也都是丑数。这样,就可以用一个优先队列保存所有已生成的丑数,每次取出最小的丑数,生成3个新的丑数。唯一需要注意的是,同一个丑数有多种生成方式,所以需要判断一个丑数是否已经生成过。在此题目中用set集合保证每个丑数只出现一次,把所有的丑数存到优先队列中。
代码如下:
#include<iostream>#include<vector>#include<set>#include<queue>using namespace std;typedef long long LL;const int ugly[3]={2,3,5};int main(){ //定义了一个越小的整数优先级越大的优先队列 priority_queue<LL,vector<LL>,greater<LL> > pq; set<LL> s;//定义一个集合,用集合元素唯一性存储丑数 pq.push(1); s.insert(1); for(int i=1;;i++){ LL top=pq.top(); pq.pop(); if(i==1500) {cout<<top<<endl;break;} for(int j=0;j<3;j++){ LL temp=top*ugly[j]; if(!s.count(temp)){//丑数temp不在集合set中 s.insert(temp); pq.push(temp); } } } return 0;}
阅读全文
0 0
- Uva136-Ugly Numbers-丑数-set集合和优先队列的运用
- UVa136 Ugly Numbers(优先队列+set判重)
- Uva136 丑数[优先队列]
- UVA136 - Ugly Numbers(丑数)
- UVA136 Ugly Numbers(优先队列应用)
- UVa136(Ugly Numbers)优先队列
- 例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
- 【日常学习】【优先队列】POJ1338 Uva136 - Ugly Numbers题解
- Uva136 Ugly Numbers 【优先队列】【例题5-7】
- 丑数 简单的优先队列和set
- 丑数 Ugly Numbers
- Ugly Numbers --丑数
- UVA - 136 Ugly Numbers set+优先队列
- poj1338 Ugly Numbers(set + 优先队列)
- 《算法竞赛入门经典2ndEdition 》例题5-7 丑数(Ugly Numbers, Uva136)
- hdu 1058 Humble Numbers 丑数(set,优先队列应用)
- Ugly Numbers(丑数)
- NYOJ1097 Ugly Numbers 【丑数】
- 概率论04 随机变量
- 概率论05 离散分布
- 概率论06 连续分布
- VB中Unload、END、Hide的区别
- 概率论07 联合分布
- Uva136-Ugly Numbers-丑数-set集合和优先队列的运用
- 概率论08 随机变量的函数
- 概率论09 期望
- 【hihocoder】1014 Trie树
- 概率论10 方差与标准差
- 概率论11 协方差与相关系数
- 概率论12 矩与矩生成函数
- 概率论13 中心极限定律
- 计算机网络概述