제출 #1166076

#제출 시각아이디문제언어결과실행 시간메모리
1166076fryingducKitchen (BOI19_kitchen)C++20
0 / 100
11 ms328 KiB
#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 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...