Submission #448816

#TimeUsernameProblemLanguageResultExecution timeMemory
448816julian33Kitchen (BOI19_kitchen)C++14
100 / 100
98 ms1876 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__) template<typename ...Args> void logger(string vars, Args&&... values) { cerr<<vars<<" = "; string delim=""; (...,(cerr<<delim<<values,delim=", ")); cerr<<"\n"; } #else #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__) template<typename ...Args> void logger(string vars, Args&&... values) {} #endif #define pb push_back #define sz(x) (int)(x.size()) typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; template<typename T> inline void maxa(T& a,T b){a=max(a,b);} template<typename T> inline void mina(T& a,T b){a=min(a,b);} mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int mxN=2e5+5; //make sure this is right const int mod=1e9+7; int dp[mxN][2]; int main(){ cin.sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int n,m,k; cin>>n>>m>>k; int tot=0; int bad=0; for(int i=0;i<n;i++){ int a; cin>>a; if(a<k) bad=1; tot+=a; } if(bad){ cout<<"Impossible\n"; return 0; } memset(dp,-1,sizeof(dp)); int lim=m<=15?tot+1000:2*tot; dp[0][1]=0; for(int i=0;i<m;i++){ int b; cin>>b; for(int j=0;j<=lim;j++){ if(j>=b && ~dp[j-b][(i%2)^1]) dp[j][(i%2)]=dp[j-b][(i%2)^1]+min(n,b); maxa(dp[j][(i%2)],dp[j][(i%2)^1]); } } for(int i=tot;i<=lim;i++){ if(dp[i][(m-1)%2]>=k*n){ cout<<i-tot<<"\n"; return 0; } } cout<<"Impossible\n"; }
#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...