Submission #567201

#TimeUsernameProblemLanguageResultExecution timeMemory
567201shrimbKitchen (BOI19_kitchen)C++17
100 / 100
294 ms213900 KiB
#pragma GCC optimize ("Ofast") #pragma GCC target ("avx,avx2,fma") #include"bits/stdc++.h" using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template<class x> using ordered_set = tree<x, null_type,less<x>, rb_tree_tag,tree_order_statistics_node_update>; #define int long long #define endl '\n' #define mod 1000000007 //\ #define mod 1686876991 const int maxn = 301; int n, m, k, cntAK, cntBN, smA, smB, ans = 1e9; int A[maxn], B[maxn]; int dp[maxn][maxn*maxn]; int rec (int i, int sm) { if (sm == 0) return 0; if (i == m || sm < 0) return -INT_MAX; if (dp[i][sm] != -1) return dp[i][sm]; return dp[i][sm] = max(rec(i + 1, sm), rec(i + 1, sm - B[i]) + min(B[i], n)); } signed main () { cin.tie(0)->sync_with_stdio(0); cin >> n >> m >> k; for (int i = 0 ; i < n ; i++) { cin >> A[i]; smA += A[i]; if (A[i] < k) cntAK++; } for (int i = 0 ; i < m ; i++) { cin >> B[i]; cntBN += min(n, B[i]); smB += B[i]; } if (m < k || smB < smA || cntBN/n < k || cntAK) { // assert(0); cout << "Impossible\n"; return 0; } memset(dp, -1, sizeof dp); for (int i = smA ; i < maxn * maxn ; i++) { if (rec(0, i) / n >= k) { ans = min(ans, i - smA); break; } } cout << ans << endl; } /* impossible: - M < K - sum of B < sum of A - the number of (B >= N) is < K - theres an A which is < K */

Compilation message (stderr)

kitchen.cpp:17:1: warning: multi-line comment [-Wcomment]
   17 | //\
      | ^
#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...