Submission #1181492

#TimeUsernameProblemLanguageResultExecution timeMemory
1181492ollelKitchen (BOI19_kitchen)C++20
100 / 100
26 ms656 KiB
#pragma GCC optimize ("03")
#include <bitset>
#pragma GCC target ("avx2")

using namespace std;
#include <bits/stdc++.h>

#define rep(i,a,b) for (int i = a; i < b; i++)
#define pb push_back

typedef long long ll;
typedef vector<ll> vi;

int n, m, k;
vector<int> arr, brr;

mt19937 rng(6215);
ll rand(ll maxr) {
    return uniform_int_distribution<ll>(0, maxr)(rng);
}

void solve() {
    cin >> n >> m >> k;
    arr.resize(n);
    brr.resize(m);
    rep(i,0,n) cin >> arr[i];
    rep(i,0,m) cin >> brr[i];

    rep(i,0,n) {
        if (arr[i] < k) {
            cout << "Impossible\n";
            return;
        }
    }

    int bsum = 0;
    rep(i,0,m) bsum += brr[i];
    vector<int> dp(bsum + 1, -1);
    dp[0] = 0;

    rep(i,0,m) {
        for (int j = bsum; j >= 0; j--) {
            if (dp[j] == -1) continue;
            if (j + brr[i] <= bsum) {
                dp[j + brr[i]] = max(dp[j + brr[i]], dp[j] + min(brr[i], n));
            }
        }
    }

    int asum = 0;
    rep(i,0,n) asum += arr[i];
    int ans = -1;
    rep(j,asum,bsum+1) {
        if (dp[j] >= n * k && dp[j] != 1e9) {
            ans = j;
            break;
        }
    }
    if (ans == -1) {
        cout << "Impossible\n";
    }
    else {
        cout << ans - asum << endl;
    }

}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
solve();
}
#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...