https://www.acmicpc.net/problem/1654
import java.util.*;
import java.io.*;
public class Main
{
public static long[] lansun;
public static int n;
public static int m;
public static long search(){
long l = 0l;
long r = 1l<<32 -1 ;
long length = 0;
while(l<=r){
long mid = (l+r)/2;
int count = 0;
for(int i=0; i<n;i++){
count+= lansun[i]/mid;
}
if(count>=m){
l=mid+1;
length=mid;
}else{
r=mid-1;
}
}
return length;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input1 = br.readLine().split(" ");
n = Integer.valueOf(input1[0]);
m = Integer.valueOf(input1[1]);
lansun = new long[n];
for(int i=0; i<n;i++){
lansun[i] = Long.valueOf(br.readLine());
}
long ans = search();
System.out.println(ans);
}
}
import java.util.Scanner;
class Main
{
static int calculateCount(int[] lengths, long cutLength) {
int cnt = 0;
for (int l : lengths)
cnt += l / cutLength;
return cnt;
}
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int N = sc.nextInt();
int[] len = new int[K];
for (int i = 0; i < K; i++)
len[i] = sc.nextInt();
long l = 1, r = (1L << 31) - 1, ans = -1;
while (l <= r) {
long m = l + (r - l) / 2;
if (calculateCount(len, m) >= N) {
ans = m;
l = m + 1;
}
else r = m - 1;
}
System.out.println(ans);
}
}
'Problem Solving > 이진 탐색' 카테고리의 다른 글
BOJ2110 공유기 설치 (매개변수 탐색) (1) | 2024.02.27 |
---|---|
BOJ6236 용돈관리 (매개변수 탐색) (1) | 2024.02.27 |
BOJ2805 나무자르기 (매개변수탐색) (1) | 2024.02.27 |
BOJ10816 숫자카드2 (1) | 2024.02.14 |
BOJ2470 두 용액 (0) | 2024.02.14 |