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
| from sortedcontainers import SortedList
class Solution:
def maxTaskAssign(self, tasks, workers, pills, strength):
tasks = sorted(tasks)
workers = sorted(workers)
def check(num_tasks):
available_workers = SortedList(workers[-num_tasks:])
remaining_pills = pills
for task_strength in tasks[:num_tasks][::-1]:
suitable_worker_index = available_workers.bisect_left(task_strength)
if suitable_worker_index < len(available_workers):
available_workers.pop(suitable_worker_index)
elif remaining_pills > 0:
adjusted_worker_index = available_workers.bisect_left(task_strength - strength)
if adjusted_worker_index < len(available_workers):
available_workers.pop(adjusted_worker_index)
remaining_pills -= 1
else:
return False
return len(available_workers) == 0
begin, end = 0, min(len(workers), len(tasks)) + 1
while begin + 1 < end:
mid = (begin + end)//2
if check(mid):
begin = mid
else:
end = mid
return begin
|