public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringTokenizer st = new StringTokenizer(sc.nextLine()); int n = Integer.parseInt(st.nextToken()); long m = Long.parseLong(st.nextToken());
int arr[] = new int[n]; for(int i= 0; i < n; i++) { arr[i]= Integer.parseInt(sc.nextLine()); }
//arrays.sort(arr); long min = 20000000000L; for(int i = 0; i < n; i++) { if(min > arr[i]) min = arr[i]; } long start = min; long end = min*m; long mid = (start+end)/2; long ans = 0L; long sum = 0L; int i = 0;
while(true) { mid = (start+end)/2; i = 0; //System.out.println(mid +" // " +start+" : "+end); sum = 0; for(; i < n; i++) { sum+= mid/arr[i];
//System.out.print(sum+" "); if(sum >= m) break; } //System.out.println(); if(sum >= m) { end = mid - 1; ans = mid; } else { start = mid + 1; }
nosorae 3년 전
메모리가 어디서 128MB씩 쓰여서 메모리초과가 뜨는지 잘 모르겠습니다.
메모리 비중이 큰 게 배열이 다일텐데 말이죠.
다른 이유가 있을까요??
아래는 제출 코드입니다.
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringTokenizer st = new StringTokenizer(sc.nextLine());
int n = Integer.parseInt(st.nextToken());
long m = Long.parseLong(st.nextToken());
int arr[] = new int[n];
for(int i= 0; i < n; i++) {
arr[i]= Integer.parseInt(sc.nextLine());
}
//arrays.sort(arr);
long min = 20000000000L;
for(int i = 0; i < n; i++) {
if(min > arr[i])
min = arr[i];
}
long start = min;
long end = min*m;
long mid = (start+end)/2;
long ans = 0L;
long sum = 0L;
int i = 0;
while(true) {
mid = (start+end)/2;
i = 0;
//System.out.println(mid +" // " +start+" : "+end);
sum = 0;
for(; i < n; i++) {
sum+= mid/arr[i];
//System.out.print(sum+" ");
if(sum >= m)
break;
}
//System.out.println();
if(sum >= m) {
end = mid - 1;
ans = mid;
}
else {
start = mid + 1;
}
if(start > end) {
break;
}
}
System.out.println(ans);
}
}