hdu 1058 Humble Numbers

来源:互联网 发布:淘宝三星手机官网 编辑:程序博客网 时间:2024/06/05 04:20

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058
优先队列的应用,如下:

#include<functional>#include<algorithm>#include<iostream>#include<cstdlib>#include<cstdio>#include<vector>#include<queue>using std::vector;using std::greater;using std::priority_queue;typedef unsigned long long ull;const int Max_N = 5843;ull ans[Max_N];void init() {    int arr[5] = { 2, 3, 5, 7 };    priority_queue<ull, vector<ull>, greater<ull> > que;    que.push(1);    for (int i = 1; i <= Max_N;) {        ull t = que.top();        que.pop(), ans[i] = t;        if (ans[i] == ans[i - 1]) {            continue;        } else {            i++;        }        for (int j = 0; j < 4; j++) que.push((ull)(t * arr[j]));    }}int main(){    init();    int n;    while (~scanf("%d", &n) && n) {        if (n % 10 == 1 && n % 100 != 11)             printf("The %dst humble number is %lld.\n", n, ans[n]);        else if (n % 10 == 2 && n % 100 != 12)             printf("The %dnd humble number is %lld.\n", n, ans[n]);        else if (n % 10 == 3 && n % 100 != 13)             printf("The %drd humble number is %lld.\n", n, ans[n]);        else printf("The %dth humble number is %lld.\n", n, ans[n]);    }    return 0;}
0 0