您的位置:首页 > 其它

UVA - 136 Ugly Numbers set+优先队列

2015-03-31 20:24 134 查看
题目大意:丑数的含义是:不能被2,3,5以外的素数整出,现在要求你输出第1500个丑数

解题思路:有优先队列存放丑数,每次取出一个丑数,依次乘上2,3,5,因为是丑数,所以乘上了2,3,5后,依然是丑数,因为它的因子都是都2,3,5组成的.然后再用set判重

[code]#include<cstdio>
#include<queue>
#include<set>
#include<vector>
using namespace std;
set<long long> s;
priority_queue<long long, vector<long long>, greater<long long> > q;
long long mul[3] = {2,3,5};

int main() {
    q.push(1);
    s.insert(1);
    int cnt = 0;
    while(1) {
        long long tmp = q.top();
        q.pop();
        cnt++;
        if(cnt == 1500) {
            printf("The 1500'th ugly number is %lld.\n", tmp);
            break;      
        }
        for(int i = 0; i < 3; i++) {
            long long t = tmp * mul[i];
            if(!s.count(t)) {
                s.insert(t);
                q.push(t);
            }
        }   
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: