#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 = 7e5;
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |