Write min_time(machines: list[int], t: int) -> int.
A factory has several machines working in parallel. Machine i needs machines[i] seconds to build one product, and it keeps building products back to back. Return the smallest time T by which the machines together can have finished at least t products.
Example: machines = [2, 3, 7], t = 7 gives 8: by time 8 the machines have built 4 + 2 + 1 = 7 products (at time 7 it's only 3 + 2 + 1 = 6).
Constraints: 1 <= len(machines) <= 2 * 10^4, 1 <= machines[i], t <= 10^9. The answer can be as large as 10^18.
Simulating second by second (or product by product) is far too slow for large t; aim for O(n log(answer)). In C++/Java, stop summing once you reach t, or the count can overflow 64 bits.
Show hint
by time T the machines have built sum(T // m for m in machines) products, and that number only grows with T. The answer is at most min(machines) * t.