항상 문제 범위를 잘 읽어봐야겠다...
T_k * max(M)인 1e18이 초기 hi 값이어야 한다.
그러므로 int가 아닌 long long int 로 변수를 선언해야 오버플로우가 나지 않는다.
#include <bits/stdc++.h>
using namespace std;
#define lint long long
int N, M;
vector<lint> simsa;
bool check(lint TL){
lint cnt = 0;
for (auto i : simsa){
cnt += TL / i;
if (cnt >= M) return true; // 오버플로우 방지
}
if (cnt >= M) return true;
return false;
}
int main(){
cin >> N >> M;
for (int i = 0; i < N; i++){
int t; cin >> t;
simsa.push_back(t);
}
lint lo = 0; lint hi = 1e18;
while (lo + 1 < hi){
lint mid = (lo+hi)/2;
if (check(mid)) hi = mid;
else lo = mid;
}
cout << hi;
}