#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;
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) {
vector<int> dp(6e5 + 1);
vector<int> maxi(6e5 + 1, -1);
int cen = 3e5;
dp[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) {
for (int q = dp.size() - 1; q >= val; q--) {
if (dp[q - val]) {
dp[q] = 1;
maxi[q] = max(maxi[q], maxi[q - val] + 1);
}
}
} else {
for (int q =0; q < dp.size() + val; q++) {
if (dp[q - val]) {
dp[q] = 1;
maxi[q] = max(maxi[q], maxi[q - val] + 1);
}
}
}
}
}
if (abs(L) >= 3e5) {
cout << "impossible" << '\n';
} else {
int val = L + cen;
if (dp[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... |