Submission #1320355

#TimeUsernameProblemLanguageResultExecution timeMemory
1320355vaishakhvUplifting Excursion (BOI22_vault)C++20
0 / 100
2 ms1848 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back

#define m1(x) template<class T, class... U> void x(T&& a, U&&... b)
#define m2(x) (ll[]){(x forward<U>(b),0)...}

m1(pr){cout << forward<T>(a);  m2(cout << " " <<); cout << "\n";}
m1(re){cin >> forward<T>(a); m2(cin >>);}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll m, l; re(m, l);

    vector<ll> a(2*m+1);
    for (ll i{}; i < 2*m+1; i++){
        re(a[i]);
    }
    
    if (abs(l) > 1e5) {
        pr("impossible");
        return 0;
    }

    ll ofs = 1e5;
    ll rg = 2e5 + 1;
    
    vector<ll> dp(rg, -1);
    dp[ofs] = 0; 
    
    for (ll i{}; i < 2*m+1; i++) {
        ll uplift = i - m;
        if (a[i] == 0) continue;
        
        if (uplift > 0) {
            for (ll sum = rg-1; sum >= 0; sum--) {
                if (dp[sum] == -1) continue;
                for (ll cnt = 1; cnt <= a[i] && sum + cnt*uplift < rg; cnt++) {
                    dp[sum + cnt*uplift] = max(dp[sum + cnt*uplift], dp[sum] + cnt);
                }
            }
        } else {
            for (ll sum = 0; sum < rg; sum++) {
                if (dp[sum] == -1) continue;
                for (ll cnt = 1; cnt <= a[i] && sum + cnt*uplift >= 0; cnt++) {
                    dp[sum + cnt*uplift] = max(dp[sum + cnt*uplift], dp[sum] + cnt);
                }
            }
        }
    }
    
    ll tgt = l + ofs;
    if (tgt >= 0 && tgt < rg && dp[tgt] != -1) {
        pr(dp[tgt]);
    } else {
        pr("impossible");
    }
}
#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...