제출 #1186395

#제출 시각아이디문제언어결과실행 시간메모리
1186395qwushaUplifting Excursion (BOI22_vault)C++20
5 / 100
5097 ms11368 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 = 8e5; 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]; } vector<pair<int, int>> ch; if (m <= 100) { bitset<K> bs, nb; vector<int> maxi(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); ch.clear(); while (cur < K) { ch.push_back({cur, max(maxi[cur], maxi[cur - val] + 1)}) ; cur = nb._Find_next(cur); } for (auto [ind, nv] : ch) { maxi[ind] = max(maxi[ind], nv); } bs |= nb; } } 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...