DEV Community



Saloni Gupta
Girl who loves to code | Software Developer | Competitive Programmer | Gallivanter
・2 min read


A factory has n machines which can be used to make products. Your goal is to make a total of t products.

For each machine, you know the number of seconds it needs to make a single product. The machines can work simultaneously, and you can freely decide their schedule.

Find the shortest time to make t products.


Let's assume that all the products are made by the maximum element present in the array, i.e., by the machine which takes the maximum amount of time just to make a single product.
Then use a binary search to calculate the correct time.
Consider an example, 2,3,5.
Assume all the products are made by 3rd machine having time 5 units. So, the total time would be 5*(number of products).
Here, we are using basic mathematics. One machine takes x unit of time to make a single product, then, in y unit of time, it will make y/x product.
We are going to use the same approach in a binary search.


STEP 1: Take two pointers, low and high. Set low = 0 and high = *max_element*total + 1.
STEP 2: Create a while loop with a condition where low<=high.
Find mid-value of range low to high.
STEP 3: Calculate the number of products that can be made in "MID" time.
STEP 4: Compare this and with the target value, if it is greater than the target, it means, we can reduce our time to some more extent, so decrement high = mid-1 and store the current answer in a variable, else if it is lower than the target, which means, we have to increase our time more, so increment low = mid+1.
STEP 5: Output the final answer.


Alt Text


Discussion (0)