Submission #242159

#TimeUsernameProblemLanguageResultExecution timeMemory
242159thecodingwizardBrunhilda’s Birthday (BOI13_brunhilda)C++11
48.10 / 100
515 ms45432 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]; set<ii> transitions; int main() { int m, q; cin >> m >> q; for (int i = 0; i < m; i++) cin >> A[i]; for (int i = 0; i < 10000001; i++) dp[i] = -1; dp[0] = 0; int nxtStart = 0, nxtVal = 0; for (int i = 0; i < m; i++) { nxtVal = max(nxtVal, A[i]); transitions.insert({A[i],A[i]}); } while (nxtStart != -1) { int begin = nxtStart, end = begin + nxtVal; nxtStart = -1; nxtVal = 0; end = min(end, 10000001); while (!transitions.empty() && transitions.begin()->f < end) { int x = transitions.begin()->s, i = transitions.begin()->f; transitions.erase(transitions.begin()); if (nxtStart+nxtVal < i + x) { nxtStart = i; nxtVal = x; } int nxt = (end-1)/x*x+x; if (nxt <= 10000000) transitions.insert({nxt,x}); } for (int i = begin + 1; i < end; i++) { if (dp[i] == -1) dp[i] = dp[begin]+1; } } 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...