#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
 
long long cal(vector<int> times, long long mid)
{
    long long peopleCnt = 0;
    
    for(int i = 0; i < times.size(); i++)
    {
        if(times[i] > mid)
        {
            break;
        }
        
        peopleCnt += mid / times[i];
    }
    
    return peopleCnt;
}
 
long long solution(int n, vector<int> times) 
{
    long long Min = 200000000000000;
    
    sort(times.begin(), times.end());
    
    long long left = 1;
    long long right = (long long)times[times.size()-1* n;
    
    while(left <= right)
    {
        long long mid = (left + right) / 2;
        
        long long peopleCnt = cal(times, mid);
        
        if(peopleCnt >= n)
        {
            right = mid-1;
            
            if(mid < Min)
            {
                Min = mid;
            }
        }
        else if(peopleCnt < n)
        {
            left = mid+1;
        }
    }
    
    return Min;
}
cs

+ Recent posts