Submission #567120

#TimeUsernameProblemLanguageResultExecution timeMemory
567120UzoufKitchen (BOI19_kitchen)C++14
20 / 100
742 ms6656 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define int long long #define endl "\n" int mod=1e9+7; const int N=2e5+5; template<class x> using ordered_multiset = tree<x, null_type,less_equal<x>, rb_tree_tag,tree_order_statistics_node_update>; int dp[90010]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen(".in", "r", stdin); freopen(".out", "w", stdout); int n,m,k; cin>>n>>m>>k; int time[n],cst[m]; for (int &i:time) cin>>i; for (int &i:cst) cin>>i; sort(cst,cst+m); if (m<k) { cout<<"Impossible"; return 0; } int ttl=0; for (int i=0;i<n;i++) { ttl+=time[i]; } dp[0]=1; map<int,int> mp; vector<int> ans; for (int i=0;i<m;i++){ for (int j=90005;j>=cst[i];j--){ dp[j]=max(dp[j],dp[j-cst[i]]); if (dp[j]>0 && mp[j]==0) {mp[j]=1; ans.push_back(j);} } } int nm=1e18; if (k==1) { for (int i=ttl;i<=90005;i++) { if (mp[i]!=0) { nm=i; break; } } } else { int l=0,r=m-1; while (l<r) { if ((cst[l]+cst[r])<ttl) { l++; continue; } nm=min(nm,cst[l]+cst[r]); r--; } } if (nm==1e18) cout<<"Impossible"; else cout<<nm-ttl; }
#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...