zoukankan      html  css  js  c++  java
  • USACO 3.1 Humble Numbers

    Humble Numbers

    For a given set of K prime numbers S = {p1, p2, ..., pK}, consider the set of all numbers whose prime factors are a subset of S. This set contains, for example, p1, p1p2, p1p1, and p1p2p3 (among others). This is the set of `humble numbers' for the input set S. Note: The number 1 is explicitly declared not to be a humble number.

    Your job is to find the Nth humble number for a given set S. Long integers (signed 32-bit) will be adequate for all solutions.

    PROGRAM NAME: humble

    INPUT FORMAT

    Line 1: Two space separated integers: K and N, 1 <= K <=100 and 1 <= N <= 100,000.
    Line 2: K space separated positive integers that comprise the set S.

    SAMPLE INPUT (file humble.in)

    4 19
    2 3 5 7
    

    OUTPUT FORMAT

    The Nth humble number from set S printed alone on a line.

    SAMPLE OUTPUT (file humble.out)

    27
    

     ————————————————————

    所以就是一道set的简单应用

    然而我的内存在最后一个测试点炸了

    事实上操作内存不需要n*k然后第n次的begin,只要不断维护这个序列是n长最后把--end抛出去

    然后就没有内存问题了,还会比较快

     1 /*
     2 ID: ivorysi
     3 PROG: humble
     4 LANG: C++
     5 */
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <cstring>
     9 #include <algorithm>
    10 #include <queue>
    11 #include <set>
    12 #define siji(i,x,y) for(int i=(x);i<=(y);++i)
    13 #define gongzi(j,x,y) for(int j=(x);j>=(y);--j)
    14 #define xiaosiji(i,x,y) for(int i=(x);i<(y);++i)
    15 #define sigongzi(j,x,y) for(int j=(x);j>(y);--j)
    16 #define inf 0x7fffffff
    17 #define MAXN 100005
    18 #define ivorysi
    19 using namespace std;
    20 typedef long long ll;
    21 set<int> s;
    22 int n,k,pri[105];
    23 void solve() {
    24     scanf("%d%d",&k,&n);
    25     siji(i,1,k) {scanf("%d",&pri[i]);s.insert(pri[i]);}
    26     siji(i,1,k){
    27         set<int>::iterator k=s.begin();
    28         while(1) {
    29             int tm=(*k)*pri[i];
    30             if(tm<0) break;
    31             if(s.size()>n) {
    32                 s.erase(--s.end());
    33                 if(tm>(*--s.end())) 
    34                     break;
    35             }
    36             s.insert(tm);
    37             ++k;
    38         }
    39     }
    40     printf("%d
    ",*(--s.end()));
    41 }
    42 int main(int argc, char const *argv[])
    43 {
    44 #ifdef ivorysi
    45     freopen("humble.in","r",stdin);
    46     freopen("humble.out","w",stdout);
    47 #else
    48     freopen("f1.in","r",stdin);
    49 #endif
    50     solve();
    51 }
  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/ivorysi/p/6106455.html
Copyright © 2011-2022 走看看