Submission #242154

#TimeUsernameProblemLanguageResultExecution timeMemory
242154thecodingwizardBrunhilda’s Birthday (BOI13_brunhilda)C++11
0 / 100
320 ms262148 KiB
#include <bits/stdc++.h> using namespace std; #define ii pair<int, int> #define f first #define s second int A[100000]; int dp[10000001]; vector<int> transitions[10000001]; int main() { int m, q; cin >> m >> q; for (int i = 0; i < m; i++) cin >> A[i]; for (int i = 0; i < 1000001; i++) dp[i] = -1; dp[0] = 0; priority_queue<ii, vector<ii>, greater<ii>> pq; for (int i = 0; i < m; i++) { pq.push(make_pair(0, -A[i])); for (int j = 0; j <= 10000000; j+=A[i]) { transitions[j].push_back(A[i]); } } while (!pq.empty()) { ii u = pq.top(); pq.pop(); if (dp[u.f] == -1) continue; int mx = u.f - u.s; mx = min(mx, 10000001); for (int i = u.f + 1; i < mx; i++) { for (int x : transitions[i]) { pq.push({i, -x}); } if (dp[i] == -1) dp[i] = dp[u.f]+1; } // while (!pq.empty() && pq.top().f < mx) pq.pop(); } for (int i = 0; i < q; i++) { int x; cin >> x; if (dp[x] == -1) cout << "oo" << "\n"; else cout << dp[x] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...