만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

제트코스터 2

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

요약
탑승 정원이 M명인 롤러코스터에서 줄의 인접한 두 그룹을 한 번까지 바꿀 수 있을 때, 모든 그룹을 태우는 데 필요한 최소 운행 횟수를 구합니다.
난이도

보통10점 중 5점

유형
배열, 그리디, 시뮬레이션
정답자
아직 제출이 없습니다

문제

JAG(Japan Amusement Group)는 관광객이 많이 찾는 국내 유명 놀이공원이다. 그중 제트코스터는 가장 인기 있는 놀이기구다.

오늘도 JAG는 손님으로 붐비고, 제트코스터 앞에는 여러 단체 손님이 줄을 서서 기다리고 있다. 직원인 당신이 확인해 보니 대기 줄에는 현재 NN개의 단체가 있으며, 줄 맨 앞에서 ii번째 단체는 aia_i명이다.

제트코스터는 한 번 운행할 때 최대 MM명까지 태울 수 있다. 각 운행마다 다음 규칙에 따라 손님을 좌석으로 안내하고, 대기 줄에 손님이 없을 때까지 이를 반복한다.

  1. 대기 줄이 비었거나, 맨 앞 단체의 인원이 빈 좌석 수보다 많으면 발차하고 이번 운행을 마친다.
  2. 그렇지 않으면 맨 앞 단체 전원을 빈 좌석에 앉힌다.
  3. 1로 돌아간다.

폐장 시간이 가까워졌음을 알게 된 당신은, 인접한 두 단체의 순서를 서로 바꾸면 운행 횟수를 줄일 수 있지 않을지 생각한다. 구체적으로는 다음 연산을 최대 1회 할 수 있다.

1≤i≤N−11 \le i \le N-1을 만족하는 정수 ii를 하나 고르고, 대기 줄 맨 앞에서 ii번째 단체와 i+1i+1번째 단체의 순서를 바꾼다.

연산을 최적으로 했을 때, 대기 줄을 모두 비우는 데 필요한 운행 횟수의 최솟값은 얼마인가? 새 손님이 줄에 추가되지 않고, 줄에 있던 손님이 빠지지도 않는다고 가정한다.

입력

첫째 줄에 정수 NN, MM이 주어진다. NN은 대기 단체의 수이며 2≤N≤2×1052 \le N \le 2 \times 10^5이다. MM은 한 번의 운행에 탑승할 수 있는 최대 인원이며 1≤M≤1091 \le M \le 10^9이다.

둘째 줄에 정수 a1,a2,…,aNa_1, a_2, \ldots, a_N이 주어지며 1≤ai≤M1 \le a_i \le M이다.

모든 데이터셋의 NN 합은 2×1062 \times 10^6을 넘지 않는다. 데이터셋은 최대 50개이며, 0 두 개가 적힌 줄로 입력이 끝난다.

출력

각 데이터셋에 대해 연산을 최적으로 했을 때 필요한 운행 횟수의 최솟값을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    9 5
    3 3 2 2 3 3 2 2 2
    6 20
    9 15 7 18 5 6
    0 0
    
    예상 출력
    5
    4