UVa136 Ugly Numbers(优先队列+set判重)

来源:互联网 发布:php开源管理后台框架 编辑:程序博客网 时间:2024/06/05 07:05

//思路:如果x是丑数,那么2*x,3*x,5*x都是丑数,则可以用一个优先队列保存生成的丑数(另外需要判重即相同的丑数不能入队列)


AC源码:

#include <iostream>#include <set>#include <vector>#include <queue>using namespace std;const int A[]={2,3,5};typedef long long LL;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 x=pq.top();pq.pop();if(i==1500){cout<<"The 1500'th ugly number is "<<x<<"."<<endl;break;}for(int k=0;k<3;++k){LL y=x*A[k];if(!s.count(y)){s.insert(y);pq.push(y);}}}return 0;}


原创粉丝点击