답안 #757790

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
757790 2023-06-13T18:31:18 Z taher Kitchen (BOI19_kitchen) C++17
72 / 100
1000 ms 11248 KB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
 
using namespace std;
 
const int N = 300 * 300 + 5;
bool visited[305][N];
int ndp[N];
 
const int inf = 1000000000;
 
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  bool found = false;
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> a(n);
  int tot = 0;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    tot += a[i];
    if (a[i] < k) {
      found = true;
    }
  }
  vector<int> b(m);
  for (int i = 0; i < m; i++) {
    cin >> b[i];
  }
  int ans = inf;
  vector<int> long_ids;
  vector<int> short_ids;
  for (int i = 0; i < m; i++) {
    if (b[i] >= n) {
      long_ids.push_back(i);
    } else {
      short_ids.push_back(i);
    }
  }

  ndp[0] = 1;
  for (int i = 0; i < (int) long_ids.size(); i++) {
    for (int it = N - 1 - b[long_ids[i]]; it >= 0; it--) {
      if (ndp[it] > 0) {
        ndp[it + b[long_ids[i]]] = max(ndp[it + b[long_ids[i]]], ndp[it] + 1);
      }
    }
  }
  for (int i = 0; i < N; i++) {
    if (ndp[i] > 0) --ndp[i];
  }
  function<void(int, int)> Rec = [&](int i, int sum) {
    if (i == (int) short_ids.size()) {
      if (sum >= max(n * k, tot)) {
        ans = min(ans, sum - tot);
        return ;
      }
      int ptr = tot - sum;
      while (ptr < N && sum + n * ndp[ptr] < n * k) ptr++;
      if (ptr < N && ndp[ptr] > 0) {
        ans = min(ans, sum + ptr - tot);
      }
      return ;
    }
    if (visited[i][sum]) {
      return ;
    }
    Rec(i + 1, sum + b[short_ids[i]]);
    Rec(i + 1, sum);
    visited[i][sum] = true;
    return ;
  };
 
  Rec(0, 0);
  if (ans < inf && !found) {
    cout << ans << '\n';
  } else {
    cout << "Impossible\n";
  }
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 596 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 1 ms 596 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 596 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 1 ms 596 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
9 Correct 1 ms 596 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 2 ms 596 KB Output is correct
12 Correct 17 ms 724 KB Output is correct
13 Correct 121 ms 840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 103 ms 10068 KB Output is correct
2 Correct 81 ms 7840 KB Output is correct
3 Correct 194 ms 8640 KB Output is correct
4 Correct 138 ms 6036 KB Output is correct
5 Correct 232 ms 11248 KB Output is correct
6 Correct 63 ms 6520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 596 KB Output is correct
2 Correct 23 ms 768 KB Output is correct
3 Correct 68 ms 748 KB Output is correct
4 Correct 85 ms 748 KB Output is correct
5 Correct 81 ms 796 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 596 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 1 ms 596 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 1 ms 596 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
9 Correct 1 ms 596 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 2 ms 596 KB Output is correct
12 Correct 17 ms 724 KB Output is correct
13 Correct 121 ms 840 KB Output is correct
14 Correct 103 ms 10068 KB Output is correct
15 Correct 81 ms 7840 KB Output is correct
16 Correct 194 ms 8640 KB Output is correct
17 Correct 138 ms 6036 KB Output is correct
18 Correct 232 ms 11248 KB Output is correct
19 Correct 63 ms 6520 KB Output is correct
20 Correct 4 ms 596 KB Output is correct
21 Correct 23 ms 768 KB Output is correct
22 Correct 68 ms 748 KB Output is correct
23 Correct 85 ms 748 KB Output is correct
24 Correct 81 ms 796 KB Output is correct
25 Correct 17 ms 608 KB Output is correct
26 Correct 24 ms 584 KB Output is correct
27 Correct 490 ms 1160 KB Output is correct
28 Correct 996 ms 2148 KB Output is correct
29 Correct 78 ms 564 KB Output is correct
30 Execution timed out 1082 ms 2848 KB Time limit exceeded
31 Halted 0 ms 0 KB -