#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
void solve () {
int m, l; cin >> m >> l;
int n = 2 * m + 1;
vector<int> a(n);
for (int &x : a) cin >> x;
int sum = 0;
vector<int> c(n);
for (int i = 0; i <= m; i++) sum += (i - m) * a[i], c[i] = a[i];
for (int i = m + 1; i < n; i++) {
c[i] = min(a[i], (l - sum) / (i - m));
sum += c[i] * (i - m);
}
for (int i = 0; i < m; i++) {
int val = min(a[i], (l - sum) / (m - i));
c[i] -= val;
sum += val * (m - i);
}
if (abs(sum - l) > m) return cout << "impossible", void();
vector<pair<int, int>> cnt;
int tot = 0;
for (int i = 0; i < n; i++) {
tot += c[i];
if (i == m) continue;
int j = 1, s = min(m * m, a[i] - c[i]);
while (j <= s) {
cnt.push_back({j * (i - m), j});
s -= j, j *= 2;
}
if (s > 0) cnt.push_back({s * (i - m), s});
j = 1, s = min(c[i], m * m);
while (j <= s) {
cnt.push_back({j * (m - i), -j});
s -= j, j *= 2;
}
if (s > 0) cnt.push_back({s * (m - i), -s});
}
int m2 = m * m;
vector<int> dp(2 * m2 + 10, -1e9), f(2 * m2 + 10, -1e9);
dp[m2] = f[m2] = 0;
for (auto [x, y] : cnt) {
for (int i = 0; i <= 2 * m2; i++) {
if (i - x <= 2 * m2 and i - x >= 0 and dp[i - x] != -1e9) f[i] = max(f[i], dp[i - x] + y);
}
dp = f;
}
if (f[l - sum + m2] + tot >= 0) cout << f[l - sum + m2] + tot;
else cout << "impossible";
}
int main() {
//freopen("filename.in", "r", stdin), freopen("filename.out", "w", stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1; //cin >> t;
while (t--) solve();
}
# | 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... |