제출 #1151684

#제출 시각아이디문제언어결과실행 시간메모리
1151684dobri_okeKitchen (BOI19_kitchen)C++20
0 / 100
0 ms328 KiB
//#pragma GCC target ("avx2")   
//#pragma GCC optimize ("Ofast")   
#include <bits/stdc++.h>   
using namespace std;  
#define int long long  
#define F first 
#define S second 
#define pb push_back 
const int N = 1e3+100, NN=26, mod=1e9+7;
//int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
//int lcm(int a, int b) { return a / gcd(a, b) * b; }
//int binpow(int a,int b){if(!b)return 1; if(b&1)return a*binpow(a,b-1)%mod; int x=binpow(a,b/2); return x*x%mod;}
signed main(){   
    ios_base::sync_with_stdio(0);   
    cin.tie(0);   
    cout.tie(0);
    int n, m, k;
    cin >> n >> m >> k;
    int a[n+1], b[m+1];
    int sum=0;
    multiset < int > st;
    for(int i=1;i<=n;i++){ cin >> a[i]; sum+=a[i];}
    for(int i=1;i<=m;i++){ cin >> b[i]; st.insert(b[i]);}
    if((k>m) || (*st.begin()<k)){
        cout << "Impossible";
        return 0;
    }
    int ans=0;
    bool b2=0;
    if(k==1){
        if(b[1]-sum<0) cout << "Impossible";
        else cout << b[1]-sum;
        return 0;
    }
    st.clear();
    st.insert(b[1]-k);
    st.insert(b[2]-k);
    for(int i=1;i<=n;i++){
        while(a[i]>0){
            int g=*st.rbegin(), h=*st.begin();
            if(g==0){
                b2=1;
                break;
            }
            st.erase(g);
            st.erase(h);
            st.insert(h);
            st.insert(g-1);
            a[i]--;
        }
        if(b2==1) break;
    }
    if(b2==1) cout << "Impossible";
    cout << *st.rbegin();
   // else (*st.rbegin())+(*st.begin());
}
#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...