Submission #493015

#TimeUsernameProblemLanguageResultExecution timeMemory
493015wiwihoKitchen (BOI19_kitchen)C++14
0 / 100
1 ms460 KiB
#include <bits/stdc++.h> #define printv(a, b) {\ for(auto pv : a) b << pv << " ";\ b << "\n";\ } using namespace std; typedef long long ll; const ll MAX = INT_MAX; void nosol(){ cout << "Impossible\n"; exit(0); } int n, m, k; vector<int> a; vector<int> b; ll sa = 0; const int SZ = 10; ll calc(int msk){ //cerr << "calc " << msk << "\n"; vector<ll> t(SZ + 5); ll sb = 0; for(int i = 1; i <= m; i++){ if(!(1 << (i - 1) & msk)) continue; sb += b[i]; t[b[i]]++; } if(sa > sb) return MAX; for(int i = SZ; i >= 1; i--) t[i] += t[i + 1]; //printv(t, cerr); int pos = 1, now = 1; for(int i = 1; i <= n; i++){ int v = k; //cerr << "test " << i << " " << pos << " " << now << " " << v << "\n"; if(v <= t[now] - pos + 1){ pos += v; } else{ v -= t[now] - pos + 1; if(t[now + 1] < v || v >= pos) return MAX; now++; pos = v + 1; } if(pos == t[now] + 1) now++, pos = 1; } return sb - sa; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cerr.tie(0); cin >> n >> m >> k; a.resize(n + 1); b.resize(m + 1); ll sb = 0; for(int i = 1; i <= n; i++) cin >> a[i], sa += a[i]; for(int i = 1; i <= m; i++) cin >> b[i], sb += b[i]; sort(a.begin() + 1, a.end(), greater<>()); sort(b.begin() + 1, b.end()); if(k > m || sa > sb){ nosol(); } for(int i = 1; i <= n; i++) if(a[i] < k) nosol(); assert(m <= 15); ll ans = MAX; for(int i = 0; i < (1 << m); i++){ ans = min(ans, calc(i)); } if(ans == MAX) nosol(); assert(ans >= 0); cout << ans << "\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...