책 교체

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

요약
사서가 용량이 정해진 책상들과 서가 사이에서 LRU 방식으로 책을 옮기며 학생들의 요청을 처리하는 과정을 시뮬레이션해 총 비용을 구하는 문제입니다.
난이도

보통10점 중 6점

유형
시뮬레이션, 큐, 구현
정답자
아직 제출이 없습니다

문제

하치오지 교수가 낸 과제의 마감이 내일이다. 과제를 마치려면 학생들은 도서관에 있는 여러 참고 도서의 페이지를 복사해야 한다. 모든 참고 도서는 사서만 들어갈 수 있는 서고에 보관되어 있으므로, 복사본이 필요한 학생은 사서에게 부탁해야 한다. 사서는 서고에서 요청된 책을 꺼내 페이지를 복사한다.

학생들은 카운터 앞에 한 줄로 선다. 한 번에 한 권만 요청할 수 있다. 요청이 처리된 뒤 아직 더 요청할 책이 남아 있으면 그 학생은 줄의 맨 뒤로 간다.

전체 상황은 그림 1(도서관)에 나와 있다.

서고에는 책상 mm개 D1,D2,…,DmD_1, D_2, \dots, D_m과 선반 하나가 있으며, 문에서 방 안쪽으로 이 순서대로 일렬로 놓여 있다. 각 책상에는 책을 최대 cc권까지 올려둘 수 있다. 처음에는 모든 책상이 비어 있으며(모든 책은 선반에 있다), 도서관이 문을 연 뒤에는 새로운 학생이 오지 않는다.

요청을 처리할 때 사서는 D1,D2,…,DmD_1, D_2, \dots, D_m 순서로 책을 찾고, 마지막으로 선반을 살펴본다. 책을 찾으면 그것을 꺼내 학생에게 페이지 복사본을 건넨다. 그런 다음 사서는 아래 절차에 따라 그 책을 D1D_1에 놓는다.

  • D1D_1이 가득 차 있지 않으면(현재 올려둔 책이 cc권 미만이면) 요청된 책을 D1D_1에 올린다.
  • D1D_1이 가득 차 있으면 사서는 다음과 같이 한다.
    1. 요청된 책을 입구에서 가장 가까운, 가득 차지 않은 책상에 잠시 올려둔다. 모든 책상이 가득 차 있으면 선반에 올린다.
    2. D1D_1에서 가장 오랫동안 요청되지 않은 책(가장 오래 사용되지 않은 책)을 꺼낸다.
    3. 그 책을 입구에서 가장 가까운, D1D_1을 제외한 가득 차지 않은 책상에 올린다. D1D_1을 제외한 모든 책상이 가득 차 있으면 선반에 올린다.
    4. 잠시 올려두었던 요청된 책을 다시 가져온다.
    5. 마지막으로 요청된 책을 D1D_1에 올린다.

비용. 책상이나 선반에 접근하는 것만 비용이 든다. 책을 어떤 위치에 올리거나 그 위치에서 꺼낼 때마다 접근 11회로 센다. 책상 DiD_i에 접근하는 비용은 ii이고, 선반에 접근하는 비용은 m+1m + 1이다. 그 밖의 동작에는 비용이 들지 않는다. 학생과 사서의 동작을 시뮬레이션하여 모든 요청을 처리하는 데 드는 총비용을 구하라.

비용 계산 예시. 책상이 33개이고 각 책상에 최대 11권을 올릴 수 있으며, 학생이 두 명이라고 하자. 첫 번째 학생은 책 60,61,6260, 61, 62를, 두 번째 학생은 70,6070, 60을 요청한다. 요청이 더 남은 학생은 줄 맨 뒤로 다시 서므로, 책은 60,70,61,60,6260, 70, 61, 60, 62 순으로 처리된다. 먼저 책 6060을 처리하는 데 55의 비용이 든다(선반에서 꺼내는 데 44, D1D_1에 올리는 데 11). 이어서 7070을 처리하는 데 1313, 61,60,6261, 60, 62를 처리하는 데 각각 14,12,1414, 12, 14가 들어 총 5+13+14+12+14=585 + 13 + 14 + 12 + 14 = 58이 된다.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.

m c n
k1
b11 ... b1k1
...
kn
bn1 ... bnkn

모든 값은 양의 정수이다. mm은 책상의 개수로 m≤10m \le 10이다. cc는 한 책상에 올릴 수 있는 책의 최대 권수로 c≤30c \le 30이다. nn은 학생 수로 n≤100n \le 100이다. ii번째 학생에 대해 kik_i는 요청하는 책의 수로 ki≤50k_i \le 50이며, bi1,…,bikib_{i1}, \dots, b_{ik_i}는 요청 순서대로 나열한 책의 ID이다. 모든 책의 ID는 서로 다르고 각 ID는 100100 미만이다. 한 학생이 같은 책을 두 번 이상 요청할 수도 있다.

입력의 끝은 공백으로 구분된 세 개의 00(0 0 0)만 있는 줄로 나타내며, 이 줄은 데이터셋이 아니다.

출력

각 데이터셋마다 모든 요청을 처리하는 데 드는 총비용을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2 1 1
    1
    50
    2 1 2
    1
    50
    1
    60
    2 1 2
    2
    60 61
    1
    70
    4 2 3
    3
    60 61 62
    1
    70
    2
    80 81
    3 1 2
    3
    60 61 62
    2
    70 60
    1 2 5
    2
    87 95
    3
    96 71 35
    2
    68 2
    3
    3 18 93
    2
    57 2
    2 2 1
    5
    1 2 1 3 1
    0 0 0
    
    예상 출력
    4
    16
    28
    68
    58
    98
    23