아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

휴먼 파이프라인

시간 제한1.5초메모리 제한1024 MB

요약
N명을 두 팀으로 나누어 각 팀의 작업 시간 ceil(K / (최저 속도 × 팀 인원)) 중 큰 값이 최소가 되도록 만들고 그 시간을 구한다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 이분 탐색, 수학
정답자
아직 제출이 없습니다

문제

오늘은 중요한 날이다. SUAPC가 있는 날이기 때문이다.

이렇게 중요한 날이지만 안타깝게도 일을 해야 한다. 오늘 해야 할 일은 상자 KK개를 적절한 곳으로 옮기는 일이다.

상자 KK개는 너무 많아서 아무래도 혼자서 전부 나를 수는 없기 때문에, NN명의 SUAPC 참가자들이 상자를 나르기 위해 모여 있다. NN명 모두가 일을 최대한 빠르게 마치고 SUAPC에 참가하고 싶어한다.

참가자들은 두 팀으로 나눠져서 작업을 진행하기로 했다. 두 팀이 같은 수의 상자를 옮길 필요는 없다. 두 팀 모두 적어도 한 명은 포함되어야 한다. 각 사람의 분당 작업 속도는 viv_i며 팀의 작업 속도는

((해당 팀에 속한 사람들의 작업 속도 중 가장 느린 작업 속도)×()\times(팀에 속한 사람의 수))

이다. 상자 KK개를 옮기는 팀의 분당 작업 속도가 vv일 때, 팀이 작업을 마치는 데에는 ⌈Kv⌉\left\lceil \frac{K}{v} \right\rceil분이 걸린다.

모두가 행복하게 SUAPC에 참가할 수 있게, 모든 상자를 최대한 빠르게 옮길 수 있도록 NN명을 적절히 두 팀으로 나누어 두 팀이 동시에 상자를 옮기기 시작했을 때 제일 빨리 끝나는 경우의 시간을 구하자.

입력

다음과 같이 입력이 주어진다.

NN KK
v1v_1 v2v_2 ⋯\cdots vNv_N

  • NN은 모인 사람의 수다. (2≤N≤200 0002 \le N \le 200\,000)
  • KK는 옮겨야 하는 상자의 개수이다. (1≤K≤10181 \le K \le 10^{18})
  • viv_i는 ii번째 사람의 분당 작업 속도이며, 1분에 상자 viv_i개를 옮길 수 있다는 뜻이다. (1≤vi≤1091 \le v_i \le 10^9)
  • 입력으로 주어지는 모든 수는 정수다.

출력

모든 상자를 최대한 빠르게 옮기는 경우의 작업 시간을 분 단위로 출력한다.

예제2

  1. 예제 1

    입력
    5 100
    3 1 2 4 5
    
    예상 출력
    10
    
  2. 예제 2

    입력
    2 15600000
    500 1000
    
    예상 출력
    10400