대회 운영에 있어 제일 귀찮은 것...

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

요약
너비 L 안에서 단어를 줄로 나누어 줄 간격 최댓값을 최소로 하고, 그런 배치 중 줄 수를 최소로 한다.
난이도

어려움10점 중 8점

유형
이분 탐색, 그리디, 동적 계획법
정답자
아직 제출이 없습니다

문제

대회 운영에 있어 제일 귀찮은 것은 에디토리얼 작성 및 편집이지만, 나중에 대회 문제를 업솔빙하거나 풀이가 궁금한 사람들은 에디토리얼이 없다면 참고할 수 있는 수단이 없어 불편할 수 있다. 또한 에디토리얼이 있더라도 특정 대회 혹은 문제의 에디토리얼을 찾는 것은 쉽지 않을 수 있다. 이에 유틸은 CP(Competitive Programming) 대회들의 에디토리얼을 모아둔 GitHub 레포지토리를 만들어 정리해 많은 PS(Problem Solving)러들에게 도움을 주고자 한다.

이 소식을 들은 동우는 본인의 게으름을 반성하며 6회 MatKor Cup이 끝나고 여유가 생기면 이제는 진짜로 4회 대회부터 공개되지 않은 에디토리얼을 이번 대회까지 포함해 모두 작성, 편집해 유틸의 레포지토리에 공유하고자 한다. 이를 위해 동우는 에디토리얼 문서 작성을 해야 한다.

문서 작성을 위해 동우가 사용하는 프로그램의 한 줄의 길이는 LL이며, 공백으로 구분된 몇 개의 단어로 이루어진 문서를 작성하려고 한다. 양쪽 정렬을 사용할 시 다음과 같이 정렬되며, 각 줄의 공백은 다음과 같이 정의된다.

  • 서로 다른 단어는 다른 줄에 위치하거나, 같은 줄의 경우 단어 간 최소 11 이상의 간격이 필요하다.

  • 한 단어는 같은 줄에 모두 포함되어야 한다. 즉, 한 단어를 다음 줄로 넘기지 못한다.

  • 아래 “마지막 줄이 아닐 때” “한 줄에 한 개의 단어만 포함할 경우”를 제외하고는, 같은 단어 내의 글자는 공백없이 붙여 쓴다.

  • 한 줄에 들어갈 단어가 결정될 경우 다음과 같이 문서가 작성된다. 모든 경우에 대해 그 줄의 길이를 초과해 단어를 적을 수는 없다.

    • 마지막 줄이 아닐 때

      • 한 줄에 두 개 이상의 단어를 포함할 경우 첫 글자와 마지막 글자를 그 줄의 가장 앞과 뒤로 맞춘 뒤, 단어 간 공백을 균등하게 나눈다. 즉, 정수 n≥2n\ge 2에 대해 한 줄에 길이가 s_1,s_2,⋯ ,s_ns\_1,s\_2,\cdots ,s\_n인 단어를 적고 싶다면, 그 줄의 공백의 크기는 L−∑_is_in−1\frac{L-\sum\_i{s\_i}}{n-1}이며, 11 이상이어야 한다.
      • 한 줄에 한 개의 단어만 포함할 경우 첫 글자와 마지막 글자를 그 줄의 가장 앞과 뒤로 맞춘 뒤, 글자 간 간격을 균등하게 나눈다. 즉, 그 한 줄에 길이가 ss인 단어 하나만 적고 싶다면, 그 줄의 공백의 크기는 L−ss−1\frac{L-s}{s-1}이다. 다만, 그 단어의 길이가 11인 경우에는 첫 글자를 그 줄의 가장 앞으로 맞춘 뒤 그 뒤로 L−1L-1만큼의 공백이 생긴다.
    • 마지막 줄일 때

      • 한 줄에 두 개 이상의 단어를 포함할 경우 첫 글자를 그 줄의 가장 앞으로 맞춘 뒤, 단어 간 공백을 11로 하여 나머지 단어를 적는다. 즉, 그 줄의 공백의 크기는 11이 된다.
      • 한 줄에 한 개의 단어만 포함할 경우 첫 글자를 그 줄의 가장 앞으로 맞춘 뒤, 공백 없이 적는다. 즉, 그 줄의 공백의 크기는 00이 된다.

동우는 문서를 작성할 때, 각 줄의 공백의 최댓값이 최소가 되도록, 만약 그런 경우가 여러 가지일 경우 총 줄의 수가 최소가 되도록 하고 싶다. 동우가 작성할 NN개의 단어의 W_1,W_2,⋯ ,W_NW\_1,W\_2,\cdots ,W\_N의 길이 a_1,a_2,⋯ ,a_Na\_1,a\_2,\cdots ,a\_N과 LL이 주어진다.

단어 W_1,⋯ ,W_NW\_1,\cdots ,W\_N을 차례로 작성할 때 각 줄의 공백의 최댓값이 최소가 되도록 해보자.

입력

첫 번째 줄에 단어의 개수 N(1≤N≤106)N(1\le N\le 10^6), L(1≤L≤109)L(1\le L\le 10^{9})이 공백으로 구분되어 주어진다.

두 번째 줄에 각 단어의 길이 a_1,a_2,⋯ ,a_N(1≤a_i≤L)a\_1,a\_2,\cdots ,a\_N(1\le a\_i\le L)이 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 단어 W_1,⋯ ,W_NW\_1,\cdots ,W\_N을 차례로 작성할 때 각 줄의 공백의 최댓값의 최솟값 zz를 출력한다.

출력한 값이 정답과 절대/상대 오차가 10−910^{-9} 이하라면 정답으로 한다.

예제3

  1. 예제 1

    입력
    8 10
    5 8 2 1 4 6 1 2
    
    예상 출력
    1.5
    
  2. 예제 2

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

    입력
    12 91
    12 52 34 23 11 12 8 7 4 1 12 17
    
    예상 출력
    7.181818182