BOJ 3079 | 입국심사

전승민·2023년 4월 17일
1

BOJ 기록

목록 보기
3/68

항상 문제 범위를 잘 읽어봐야겠다...
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;
	
}
profile
알고리즘 공부한거 끄적이는 곳

0개의 댓글