디스크 조각 모음
시간 제한1초메모리 제한128 MB
N개 클러스터에 흩어진 K개 파일을 파일 순서대로 연속 배치하는 최소 클러스터 이동 횟수를 구한다.
문제
어떤 보안 운영체제는 특별한 파일 시스템을 사용한다. 디스크 전체는 같은 크기의 클러스터 개로 나뉘어 있으며, 각 클러스터에는 번부터 번까지 번호가 매겨져 있다. 각 파일은 하나 이상의 클러스터를 차지하며, 그 클러스터들은 디스크 어디에나 흩어져 있을 수 있다. 어떤 파일도 차지하지 않은 클러스터는 비어 있는(자유) 클러스터이다. 어떤 파일의 모든 클러스터가 연속된 클러스터에 자연스러운 순서대로 놓여 있을 때 그 파일을 가장 빠르게 읽을 수 있다.
디스크는 일정한 속도로 회전하므로, 디스크 앞쪽에 있는 클러스터가 뒤쪽에 있는 클러스터보다 빠르게 읽힌다. 그래서 개의 파일에는 접근 빈도가 높은 순서대로 번부터 번까지 번호가 매겨진다. 번 파일이 차지하는 클러스터 수를 라 하면, 최적 배치에서 번 파일은 클러스터 을, 번 파일은 클러스터 를, 이런 식으로 차례대로 차지한다.
이 배치를 만들기 위해 클러스터 이동 연산을 수행한다. 클러스터 이동 연산 한 번은, 사용 중인 클러스터 하나의 내용을 메모리로 읽어 들여 비어 있는 클러스터 하나에 기록하는 것이다. 그 뒤 원래 클러스터는 비게 되고, 기록한 클러스터는 사용 중이 된다.
가능한 한 적은 횟수의 클러스터 이동 연산으로 파일들을 최적 배치로 만들어라.
입력
입력은 여러 개의 디스크 설명으로 이루어진다. 각 설명의 첫 줄에는 공백으로 구분된 두 정수 과 가 주어진다 (). 이어서 개의 줄이 주어지며, 그중 번째 줄은 번 파일을 설명한다. 이 줄은 번 파일의 클러스터 수 ()로 시작하고, 그 뒤에 이 파일이 차지하는 클러스터 번호 개가 자연스러운 순서대로 이어진다. 각 클러스터 번호는 이상 이하이다.
한 디스크 설명 안의 클러스터 번호는 모두 서로 다르며, 비어 있는 클러스터는 항상 최소한 하나 존재한다. 입력은 과 자리에 두 개가 주어지는 줄로 끝난다.
출력
각 디스크 설명마다 정확히 한 줄을 출력한다. 이동이 한 번이라도 필요하면 We need M move operations.를 출력하되, 여기서 은 최적 배치를 만드는 데 필요한 최소 클러스터 이동 연산 횟수이다. 파일들이 이미 최적으로 배치되어 있다면 대신 No optimization needed.를 출력한다.