Submission #1193757

#TimeUsernameProblemLanguageResultExecution timeMemory
1193757yhx3Kitchen (BOI19_kitchen)C++20
0 / 100
1095 ms836 KiB
#include<bits/stdc++.h> #include<iostream> #include<vector> using namespace std; #define ll long long void rec(vector<int> &b,map<int,int> &sums, vector<int> lst, int &k, int &m, int sm) { int str = lst.empty() ? 0 : lst.back()+1; for (int i = str; i < m; i++) { vector<int> cs(lst.begin(), lst.end()); cs.push_back(i); if (cs.size() >= k) { sums[sm+b[i]]++; } rec(b,sums,cs,k,m,sm+b[i]); } } void solve() { int n,m,k; cin >> n >> m >> k; vector<int> a(n); vector<int> b(m); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> b[i]; } for (int i = 0; i < n; i++) { if (a[i] < k) { cout << "Impossible"; return; } } sort(b.begin(),b.end(),greater<int>()); ll sm = 0; for (int i = 0; i < m; i++) { sm += b[i]; } map<int,int> sums; vector<int> cs; rec(b,sums,cs,k,m,0); ll ans = 0; for (int i = 0; i < n; i++) { bool ok = false; for (int j = a[i]; j <= sm; j++) { if (sums[j] > 0) { ans += j-a[i]; sums[j]--; ok = true; break; } } if (!ok) { cout << "Impossible"; return; } } cout << ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(); int t = 1; // cin >> t; while (t--) { 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...