Submission #938691

#TimeUsernameProblemLanguageResultExecution timeMemory
938691vjudge1Kitchen (BOI19_kitchen)C++17
20 / 100
69 ms3432 KiB
#include <bits/stdc++.h> #define int long long using namespace std; signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,k; cin >> n >> m >> k; vector<int> a(n),b(m); for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < m; i++) cin >> b[i]; if (k == 1) { int sum = 0LL; for (int i = 0; i < m; i++) sum+=b[i]; vector<vector<bool>> dp(m,vector<bool>(sum+1)); dp[0][0] = 1; dp[0][b[0]] = 1; for (int i = 1; i < m; i++) for (int j = 0; j <= sum; j++) { if (j-b[i] >= 0) dp[i][j] = (dp[i-1][j-b[i]] | dp[i-1][j]); else dp[i][j] = dp[i-1][j]; } /*for (int i = 0; i <= sum ;i++) { cout << "can " << i << ' ' << dp[m-1][i] << '\n'; }*/ int oth = 0; for (int i = 0; i < n; i++) oth+=a[i]; for (int i = oth; i <= sum; i++) if (dp[m-1][i]) { cout << i-oth << '\n'; return 0; } cout << "Impossible\n"; } else { if (k > m) { cout << "Impossible\n"; return 0; } int oth = 0; for (int i = 0; i < n; i++) oth+=a[i]; int fr = b[0], sr = b[1]; if (fr > sr) swap(fr,sr); for (int i = 0; i < n; i++) { if (sr - a[i] < n-i-1) { a[i] -= (sr-n+i+1); sr = n-i-1; } else { sr-=a[i]; a[i] = 0; } if (a[i] != 0) { if (fr - a[i] < n-i-1) { a[i] -= fr-n+i+1; fr = n-i-1; } else { fr-=a[i]; a[i] = 0; } } else fr--; if (a[i] != 0) { cout << "Impossible\n"; return 0; } } cout << b[0] + b[1] - oth << '\n'; } 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...