Submission #242155

#TimeUsernameProblemLanguageResultExecution timeMemory
242155thecodingwizardBrunhilda’s Birthday (BOI13_brunhilda)C++11
5.56 / 100
1116 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])); transitions[A[i]].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 (i+x<10000001) transitions[i+x].push_back(x); } transitions[i].clear(); 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...