Submission #242157

#TimeUsernameProblemLanguageResultExecution timeMemory
242157thecodingwizardBrunhilda’s Birthday (BOI13_brunhilda)C++11
11.11 / 100
1100 ms11128 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 < 1000001; 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); for (int i = begin + 1; i < end; i++) { while (!transitions.empty() && transitions.begin()->f <= i) { int x = transitions.begin()->s; transitions.erase(transitions.begin()); if (nxtStart+nxtVal < i + x) { nxtStart = i; nxtVal = x; } if (i+x<10000001) transitions.insert({i+x,x}); } 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...