Submission #757324

#TimeUsernameProblemLanguageResultExecution timeMemory
757324The_SamuraiBrunhilda’s Birthday (BOI13_brunhilda)C++17
50.95 / 100
1091 ms79308 KiB
#include "bits/stdc++.h"

using namespace std;

bool isPrime(int n) {
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return n > 1;
}

int INF = 1e9;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    clock_t startTime = clock();
//    int N = 1e4;
//    vector<int> g(N + 1);
//    vector<int> dp(N + 1, (int)1e9);
//    primes = {5, 11, 19};
//    dp[0] = 0;
//    for (int i = 1; i <= N; i++) {
//        for (int p: primes) {
//            dp[i] = min(dp[i], dp[i - i % p] + 1);
//        }
//    }
//    for (int i = 1; i <= 100; i++) {
//        cout << i << " -> " << dp[i] << endl;
//    }
    int n, q, N = 1e7;
    cin >> n >> q;
    vector<int> primes(n), g(N + 1), dp(N + 1, INF);
    iota(g.begin(), g.end(), 0);
    for (int &p: primes) {
        cin >> p;
    }
    reverse(primes.begin(), primes.end());
    for (int i = 0; i < n; i++) {
        int p = primes[i];
        for (int j = 0; j <= N; j += p) {
            for (int k = min(N, j + p - 1); k > j and j < g[k]; k--) {
                g[k] = j;
            }
        }
    }
    dp[0] = 0;
    for (int i = 1; i <= N; i++) {
        dp[i] = dp[g[i]] + 1;
    }
    while (q--) {
        int x;
        cin >> x;
        if (dp[x] >= INF) {
            cout << "oo\n";
        } else {
            cout << dp[x] << '\n';
        }
    }

#ifdef sunnitov
    cerr << "\nTime: " << (int)((double)(clock() - startTime) / CLOCKS_PER_SEC * 1000);
#endif
}

Compilation message (stderr)

brunhilda.cpp: In function 'int main()':
brunhilda.cpp:18:13: warning: unused variable 'startTime' [-Wunused-variable]
   18 |     clock_t startTime = clock();
      |             ^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...