• 洛谷——P1748 H数


    P1748 H数

    题目描述

    所谓H数,是指只含有2,3,5,7这些质因数的数,如630是H数,而22不是。现在要求输出第n个H数,为了方便起见将H[1]定为1。已知n不超过10000,最后数据在int64范围之内。

    维护一个单调队列或是一个set集合(自带去重)

    //维护四个指针,每次取最小值
    #include<iostream> #include<cstdio> #include<cmath> #include<set> #define N 10005 using namespace std; int n; long long h[N],a=1,b=1,c=1,d=1; int main() { scanf("%d",&n); h[1]=1; for(int i=2;i<=n;i++){ h[i]=h[a]*2; if(h[i]>h[b]*3) h[i]=h[b]*3; if(h[i]>h[c]*5) h[i]=h[c]*5; if(h[i]>h[d]*7) h[i]=h[d]*7; if(h[i]==h[a]*2) ++a; if(h[i]==h[b]*3) ++b; if(h[i]==h[c]*5) ++c; if(h[i]==h[d]*7) ++d; } printf("%lld ",h[n]); return 0; }
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<set>
    
    using namespace std;
    
    int n;
    set<long long>S;
    int main()
    {
        scanf("%d",&n);
        S.insert(1);
        set<long long>:: iterator it=S.begin();
        for(int i=1;i<n;i++){
            long long x=*it;
            S.insert(x*2);
            S.insert(x*3);
            S.insert(x*5);
            S.insert(x*7);
            it++;
        }
        if(!n) printf("0
    ");
        else printf("%lld
    ",*it);
        
        return 0;
    }
  • 相关阅读:
    LeetCode124 二叉树中的最大路径和
    LeetCode100 相同的树
    LeetCode206 反转链表
    LeetCode460 LFU缓存
    LeetCode876 链表的中间结点
    hdu2767 强连通分量
    hdu1827 强连通分量
    模板 tarjan算法
    hdu2227 树状数组优化dp
    割点和桥
  • 原文地址:https://www.cnblogs.com/song-/p/9722548.html
Copyright © 2020-2023  润新知