From aaabe8034d0ca8ba8aac38229abd684393219a5a Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Sun, 14 Nov 2021 10:57:30 -0800 Subject: [PATCH] Create 2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp --- ...Maximum-Number-of-Tasks-You-Can-Assign.cpp | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Binary_Search/2071.Maximum-Number-of-Tasks-You-Can-Assign/2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp diff --git a/Binary_Search/2071.Maximum-Number-of-Tasks-You-Can-Assign/2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp b/Binary_Search/2071.Maximum-Number-of-Tasks-You-Can-Assign/2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp new file mode 100644 index 000000000..eea60b46c --- /dev/null +++ b/Binary_Search/2071.Maximum-Number-of-Tasks-You-Can-Assign/2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp @@ -0,0 +1,43 @@ +class Solution { +public: + int maxTaskAssign(vector& tasks, vector& workers, int pills, int strength) + { + sort(tasks.begin(), tasks.end()); + sort(workers.begin(), workers.end()); + int left = 0, right = tasks.size(); + while (left < right) + { + int mid = right - (right - left)/2; + if (checkOK(tasks, workers, pills, strength, mid)) + left = mid; + else + right = mid-1; + } + return left; + } + + bool checkOK(vector& tasks, vector& workers, int pills, int strength, int num) + { + if (num > tasks.size()) return false; + if (num > workers.size()) return false; + + multisetSet(workers.begin(), workers.end()); + + for (int i=num-1; i>=0; i--) + { + if (*Set.rbegin() >= tasks[i]) + { + Set.erase(prev(Set.end())); + } + else + { + if (pills == 0) return false; + auto iter = Set.lower_bound(tasks[i]-strength); + if (iter == Set.end()) return false; + Set.erase(iter); + pills--; + } + } + return true; + } +};