Untitled

 avatar
unknown
plain_text
12 days ago
1.6 kB
0
Indexable
class Solution {
public:


    bool checker(vector <int> &t, vector <int> &w, int pills, int strength, int mid ){
        //t from 0 to mid -1
        //w from m-mid to m-1
        cout << pills << endl;
        int n = t.size();
        int m = w.size();
        if(mid > m){
            return false;
        }
            multiset<int> st(w.end() - mid, w.end()); 

        for(int i = mid-1;i>=0;i--){
            auto it = prev(st.end());
            if(*it >=t[i]){
                st.erase(it);
            }
            else if(pills<=0){
                return false;
            }
            else{
                auto it = st.lower_bound(t[i]-strength);
                if(it!=st.end()){
                    st.erase(it);
                    pills--;
                }
                else{
                    return false;
                }
            }            
        }
        return true;


    }

    int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength) {
        int n = tasks.size();
        int m = workers.size();
        sort(tasks.begin(),tasks.end());
        sort(workers.begin(),workers.end());
        int l = 0;
        int r = n;
        int ans = 0;
        while(l<=r){
            int mid = l+(r-l)/2;
            cout <<"mid " <<  mid << endl;
            cout << checker(tasks,workers,pills,strength, mid) << endl;
            if(checker(tasks,workers,pills,strength, mid)){
                l = mid +1;
                ans = mid;
            }
            else{
                r = mid -1;
            }
        }
        return ans;
    }
};
Leave a Comment