• USACO Humble Numbers


      这道题的意思是给你一个素数的集合, 定义丑数为集合中的数相乘, 问你第N个丑数是多少?假设我们现在已经得到了n个丑数, 要寻找地n+1个丑数的话就用当前的素数乘以之前得到的丑数之后找出大于最后一个丑数的最小值即可,代码如下:

    /*
        ID: m1500293
        LANG: C++
        PROG: humble
    */
    
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    
    struct Num
    {
        int n;
        Num() {}
        Num(int n):n(n) {}
        bool operator< (const Num& r) const
        {
            return n > r.n;
        }
    };
    
    using namespace std;
    int K, N;
    int prime[110];
    int where[110];
    int humnum[100000+10];
    
    int main()
    {
        freopen("humble.in", "r", stdin);
        freopen("humble.out", "w", stdout);
        scanf("%d%d", &K, &N);
        for(int i=0; i<K; i++)
            scanf("%d", &prime[i]);
        memset(where, 0, sizeof(where));
        humnum[0] = 1;
        int len = 1;
        for(int a=0; a<N; a++)
        {
            int next=0xffffffff>>1;
           // printf("%d
    ", next);
            for(int i=0; i<K; i++)
            {
                int j;
                for(j=where[i]; prime[i]*humnum[j]<=humnum[len-1];j++);
                where[i] = j;
                next = min(next, prime[i]*humnum[j]);
            }
            humnum[len++] = next;
        }
        printf("%d
    ", humnum[N]);
        return 0;
    }
  • 相关阅读:
    [Everyday Mathematics]20150226
    [Everyday Mathematics]20150225
    [Everyday Mathematics]20150224
    [Everyday Mathematics]20150223
    [Everyday Mathematics]20150222
    [Everyday Mathematics]20150221
    [Everyday Mathematics]20150220
    [Everyday Mathematics]20150219
    [Everyday Mathematics]20150218
    [Everyday Mathematic]20150217
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5080349.html
Copyright © 2020-2023  润新知