uva136(优先队列)

来源:互联网 发布:卡尔曼滤波跟踪算法 编辑:程序博客网 时间:2024/06/06 00:01

题意:

不能被2,3,5以外的素数整除的数,称为丑数;找出第1500个丑数;


思路:

用优先队列和map判重;

如果x是丑数,则2x,3x,5x都是丑数;

不停的放出优先队列;

并取出队头(最小的数)x;

要判断这个数是否已经访问过;

找到第1500个输出;


#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<map>#define ll long longusing namespace std;priority_queue<ll , vector<ll> , greater<ll> > q;map<ll ,int> m;int main() {q.push(1);m[1] = 1;int count = 0;while(1) {ll t = q.top();q.pop();count++;if(count == 1500) {printf("The 1500'th ugly number is %lld.\n",t);break;}if(!m[t * 2]) {m[t * 2] = 1;q.push(t * 2);}if(!m[t * 3]) {m[t * 3] = 1;q.push(t * 3);}if(!m[t * 5]) {m[t * 5] = 1;q.push(t * 5);}}return 0;}


0 0
原创粉丝点击