Submission #1186388

#TimeUsernameProblemLanguageResultExecution timeMemory
1186388qwushaUplifting Excursion (BOI22_vault)C++20
0 / 100
5095 ms16688 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define int long long typedef long long ll; typedef long double ld; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); int inf = 1e15; const int K = 1e6; signed main() { int m, L; cin >> m >> L; vector<int> a(2 * m + 1); for (int i = 0; i < 2 * m + 1; i++) { cin >> a[i]; } if (m <= 100) { bitset<K> bs, nb; vector<int> maxi(K, -1), nma(K, -1); int cen = K / 2; bs[cen] = 1; maxi[cen] = 0; for (int i = 0; i < 2 * m + 1; i++) { int val = i - m; for (int j = 0; j < a[i]; j++) { if (val > 0) { nb = (bs << val); } else { nb = (bs >> abs(val)); } int cur = nb._Find_next(0); while (cur < K) { nma[cur] = max(maxi[cur], maxi[cur - val] + 1); cur = nb._Find_next(cur); } bs |= nb; maxi = nma; } } if (abs(L) >= K / 2) { cout << "impossible" << '\n'; } else { int val = L + cen; if (bs[val]) { cout << maxi[val] << '\n'; } else { cout << "impossible" << '\n'; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...