Submission #423328

#TimeUsernameProblemLanguageResultExecution timeMemory
423328abdzagKitchen (BOI19_kitchen)C++17
31 / 100
804 ms262148 KiB
#include<bits/stdc++.h> #include<unordered_map> #define rep(i,a,b) for(int i=int(a);i<int(b);i++) #define rrep(i,a,b) for(int i=int(a);i>int(b);i--) #define trav(a,v) for(auto& a: v) #define sz(v) v.size() #define all(v) v.begin(),v.end() #define vi vector<int> typedef long long ll; typedef long double ld; typedef unsigned long long ull; const long long inf = 1e15; using namespace std; int main() { cin.sync_with_stdio(false); ll n, m, k; cin >> n >> m >> k; vector<ll> v(n); vector<ll> v2(m); rep(i, 0, n) { cin >> v[i]; if (v[i] < k) { cout << "Impossible" << endl; return 0; } } rep(i, 0, m)cin >> v2[i]; ll sum = 0; rep(i, 0, n)sum += v[i]; sort(all(v2), greater<>()); vector < pair<ll, pair<ll, ll>>>dp0; dp0.emplace_back(0, make_pair(0, 0)); vector<pair<ll, pair<ll, ll>>> dp = dp0; ll ans = inf; rep(i, 0, m) { trav(a, dp0) { if (a.second.second >= 0 && a.second.first >= k && a.first >= sum) { ans = a.first ; break; } pair<ll, pair<ll, ll>> cur = a; cur.first += v2[i]; cur.second.first++; if (cur.second.first > k)cur.second.second += v2[i]; else if(v2[i]<n)cur.second.second-=n-v2[i]; dp.push_back(cur); } sort(all(dp)); unique(all(dp)); dp0 = dp; } trav(a, dp) { if (a.second.second >= 0 && a.second.first >= k && a.first >= sum) { ans = min(ans, a.first); } } if (ans == inf)cout << "Impossible" << endl; else cout << ans - sum << endl; 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...