2861. Maximum Number of Alloys
Tags:
Didn't solve it until contest ends
Think of heap or greedy
class Solution:
    def maxNumberOfAlloys(self, n: int, k: int, budget: int, composition: List[List[int]], stock: List[int], cost: List[int]) -> int:
        def check(i, m):
            k = 0
            for ii, v in enumerate(composition[i]):
                k += max(m  * v - stock[ii], 0) * cost[ii]
                if k > budget:
                    return False
            return True
        def calc(i):
            l, r = 0 , 10 ** 9
            while l < r:
                mid = r - (r-l) // 2
                if check(i, mid):
                    l = mid
                else:
                    r = mid - 1
            return l
        res = 0
        for i in range(k):
            res = max(res, calc(i))
        return res