UVA136-Ugly Numbers
2015-07-27 20:21
405 查看
一道很经典的题,充分的利用了优先队列的各种性质,比起来用两个set,优先队列更清晰!
用set
一个set用来存放数字,一个用来反复的取和拿。
优先队列
简单明了的push,pop。
用set
#include<stdio.h> #include<set> #include<vector> #include<iostream> #include<queue> using namespace std; #define ll long long ll a[3]={2,3,5}; int main() { set<ll>num; set<ll>::iterator it; set<ll>s; num.insert(1); s.insert(1); for(int i=1;;i++){ it=num.begin(); ll x=*it; num.erase(x); if(i==1500){ cout<<"The 1500'th ugly number is "<<x<<".\n"; break; } for(int j=0;j<3;j++){ ll x2=x*a[j]; if(!s.count(x2)) {s.insert(x2);num.insert(x2); } } } }
一个set用来存放数字,一个用来反复的取和拿。
优先队列
#include<stdio.h> #include<set> #include<vector> #include<iostream> #include<queue> using namespace std; #define ll long long ll a[3]={2,3,5}; int main() { priority_queue<ll,vector<ll>,greater<ll> > num; set<ll>s; num.push(1); s.insert(1); for(int i=1;;i++){ ll x=num.top();num.pop(); if(i==1500){ cout<<"The 1500'th ugly number is "<<x<<".\n"; break; } for(int j=0;j<3;j++){ ll x2=x*a[j]; if(!s.count(x2)) {s.insert(x2);num.push(x2); } } } }
简单明了的push,pop。
相关文章推荐
- CodeForces-236A Boy or Girl
- windows 与 linux 多线程对应函数
- 文章标题
- 让body中的div高度充满父容器
- Struts2.3.24项目配置所需最少依赖jar包
- ZOJ - 3124 Celebrity jeopardy
- FindBugs规则整理(转载)
- tcpdump抓包
- epoll()无论涉及wait队列分析
- 目标检测的图像特征提取之(一)HOG特征(转)
- 虚拟机
- 九度oj 1056
- 面试题23_从上往下打印二叉树
- 程序员笔试面试算法题系列--数组
- KafkaFlume-联合配置数---据源是Syslog
- 优先队列用法
- CheckStyle的检查规则(共138条规则)
- android 错误提示---解决办法
- Assembly之instruction之JC
- mybatis Result Maps对结果分组3--一对多使用limit