Submission #242156

#TimeUsernameProblemLanguageResultExecution timeMemory
242156thecodingwizardBrunhilda’s Birthday (BOI13_brunhilda)C++11
6.67 / 100
297 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; int nxtStart = 0, nxtVal = 0; for (int i = 0; i < m; i++) { nxtVal = max(nxtVal, A[i]); transitions[A[i]].push_back(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++) { for (int x : transitions[i]) { if (nxtStart+nxtVal < i + x) { nxtStart = i; nxtVal = x; } if (i+x<10000001) transitions[i+x].push_back(x); } transitions[i].clear(); 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...