forked from wisdompeak/LeetCode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp
43 lines (40 loc) · 1.29 KB
/
2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
public:
int maxTaskAssign(vector<int>& tasks, vector<int>& 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<int>& tasks, vector<int>& workers, int pills, int strength, int num)
{
if (num > tasks.size()) return false;
if (num > workers.size()) return false;
multiset<int>Set(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;
}
};