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

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

조각 모음

면접 대비

시간 제한1초메모리 제한128 MB

요약
N개의 클러스터에 흩어진 파일들을 순서대로 연속 배치하기 위해 한 클러스터씩 옮기는 최소 이동 횟수를 구한다.
난이도

보통10점 중 6점

유형
그리디, 배열, 구현, 해시맵
정답자
아직 제출이 없습니다

문제

새로운 운영체제의 파일 시스템을 개발하고 있다. 디스크 공간은 크기가 같은 NN개의 클러스터로 나뉘며, 각 클러스터에는 11부터 NN까지의 번호가 매겨져 있다. 각 파일은 디스크의 임의의 위치에 있는 하나 이상의 클러스터를 차지한다. 어떤 파일도 차지하지 않은 클러스터는 비어 있는 것으로 본다.

파일의 모든 클러스터가 자연스러운 순서대로 연속된 클러스터에 놓여 있을 때 그 파일을 가장 빠르게 읽을 수 있다. 디스크는 일정한 속도로 회전하므로 앞쪽 클러스터를 뒤쪽 클러스터보다 빠르게 읽을 수 있고, 따라서 접근 빈도가 높은 순서대로 파일에 11부터 KK까지 번호를 매긴다. 최적 배치에서 파일 11은 클러스터 1,2,…,S11, 2, \dots, S_1을, 파일 22는 클러스터 S1+1,…,S1+S2S_1+1, \dots, S_1+S_2를 차지하며, 이런 식으로 계속된다. 여기서 SiS_i는 파일 ii가 차지하는 클러스터 수이다.

최적 배치에 도달하기 위해 클러스터 이동 연산을 수행한다. 한 번의 이동 연산은 어떤 사용 중인 클러스터의 내용을 읽어 비어 있는 클러스터에 쓰는 것이다. 그 후 원본 클러스터는 비게 되고 대상 클러스터는 사용 중이 된다.

모든 파일을 최적 배치로 만들기 위해 필요한 클러스터 이동 연산의 최소 횟수를 구하라.

입력

첫 번째 줄에는 공백으로 구분된 두 정수 NN과 KK가 주어진다 (1≤K<N≤100001 \le K < N \le 10000). 이어지는 KK개의 줄은 각각 하나의 파일을 설명한다. ii번째 파일의 설명은 파일 ii의 클러스터 수 SiS_i (1≤Si<N1 \le S_i < N)로 시작하고, 그 뒤에 그 파일이 차지하는 클러스터 번호가 자연스러운 순서대로 SiS_i개 주어진다.

입력에 등장하는 모든 클러스터 번호는 서로 다르며, 비어 있는 클러스터는 항상 최소 하나 존재한다.

출력

모든 파일을 최적 배치로 만들기 위해 필요한 클러스터 이동 연산의 최소 횟수를 정수 하나로 출력한다. 이미 최적 배치라면 00을 출력한다.

예제3

  1. 예제 1

    입력
    20 3
    4 2 3 11 12
    1 7
    3 18 5 10
    
    예상 출력
    9
    
  2. 예제 2

    입력
    6 2
    3 1 2 3
    2 4 5
    
    예상 출력
    0
    
  3. 예제 3

    입력
    5 1
    2 2 1
    
    예상 출력
    3