You have several machines, each producing one item at its own speed. One might produce every 5 seconds, another every 1000.

The question: **what is the minimum time required to produce T items?**

The first calculation required is: how many items were produced by time X? This is a simple integer division calculation, as follows:

uint64 production(vector<uint32>& machines, uint64 time) { uint64 total = 0; for (uint32 m_ix = 0; m_ix < machines.size(); m_ix++) { total += time / machines[m_ix]; } return total; }

Also, in the problem the maximum time is limited to . So, we have a bounded search space where the result at a given time is easy to calculate. *What we've got here is a binary search.*

My solution is in git and below: