#include "bits/stdc++.h"
using namespace std;
#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif
const int maxn = 305;
int n, m, k, a[maxn], b[maxn];
int diff[maxn];
void solve() {
cin >> n >> m >> k;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
for (int i = 1; i <= m; ++i) {
cin >> b[i];
}
sort(b + 1, b + m + 1);
int rm = 0;
for (int i = 1; i <= n; ++i) {
if (a[i] < k) {
cout << "impossible";
return;
}
rm += a[i];
}
int res = 1e9;
for (int l = 1; l <= m; ++l) {
int sum = 0;
for (int r = l; r <= m; ++r) {
sum += b[r];
auto calc = [&](int l, int r) {
if (r - l + 1 < k) return 0;
for (int i = l; i <= r; ++i) diff[i] = 0;
int prv = 0, res = 0;
for (int i = l; i <= r - k + 1; ++i) {
prv += diff[i];
res += (b[i] - prv);
diff[i + k] -= b[i] - prv;
prv += b[i] - prv;
}
return res;
};
int x = calc(l, r);
debug(l, r, x);
if (x >= n and sum - rm >= 0) {
res = min(res, sum - rm);
}
}
}
if (res == 1e9) cout << "impossible";
else cout << res;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
# | 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... |