Can't Stop (Large)

시간 제한30초메모리 제한512 MB

요약
선택한 k개 숫자가 각 집합에 최소 하나씩 들어가도록 덮는 가장 긴 연속 구간을 찾습니다.
난이도

보통10점 중 7점

유형
슬라이딩 윈도우, 백트래킹
정답자
아직 제출이 없습니다

문제

이 문제는 시드 잭슨(Sid Sackson)이 만든 보드게임 Can't Stop에서 아이디어를 얻었다. 게임을 해 본 적이 없어도 문제를 푸는 데는 아무 지장이 없다.

아주 큰 판에서 하는 게임을 한다고 하자. 이 게임에서는 굴림 묶음 NN개가 순서대로 주어진다. 각 굴림 묶음은 주사위 굴림 DD개로 이루어지고, 굴림 하나하나는 정수다.

게임에서 이기려면 이 수열에서 가장 긴 완전 멋진 구간을 찾아야 한다. 구간은 연속한 굴림 묶음의 나열이다. 수 kk개를 골라서 구간 안의 모든 굴림 묶음이 그중 적어도 하나를 포함하게 만들 수 있으면, 그 구간을 완전 멋진 구간이라고 부른다.

예를 들어 D=2D=2, k=3k=3이고 굴림 묶음이 다음과 같다고 하자.

묶음 번호굴림
010 20
150 60
270 30
340 40
430 30
520 40

묶음 0부터 묶음 2까지의 구간은 세 묶음이 모두 10, 50, 70 중 하나를 포함하므로 완전 멋진 구간이다. 묶음 1부터 묶음 5까지의 구간도 다섯 묶음이 모두 50, 30, 40 중 하나를 포함하므로 완전 멋진 구간이다. 이 구간은 굴림 묶음 5개를 담고 있고, 가장 긴 완전 멋진 구간이다.

가장 긴 완전 멋진 구간의 첫 굴림 묶음 번호와 마지막 굴림 묶음 번호를 출력하면 된다. 길이가 같은 완전 멋진 구간이 여럿이면 첫 번호가 가장 작은 구간을 고른다. 첫 굴림 묶음의 번호는 0이다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 테스트 케이스가 TT개 주어진다. 각 테스트 케이스의 첫 줄에는 공백으로 구분된 정수 NN, DD, kk가 주어진다. 다음 줄에는 정수 N×DN \times D개가 주어진다. 앞의 DD개는 첫 번째 굴림 묶음의 굴림이고, 그다음 DD개는 두 번째 굴림 묶음의 굴림이며, 이런 식으로 이어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤D≤41 \le D \le 4
  • 모든 굴림은 11 이상 10510^5 이하의 정수다.
  • 테스트 케이스 6개는 1≤N≤1051 \le N \le 10^5이고, 나머지 테스트 케이스는 모두 1≤N≤1031 \le N \le 10^3이다.
  • 2≤k≤32 \le k \le 3

출력

각 테스트 케이스마다 한 줄에 "Case #x: y z" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작한다. y와 z는 가장 긴 완전 멋진 구간의 첫 번호와 마지막 번호다. 길이가 같은 구간이 여럿이면 첫 번호가 가장 작은 구간을 출력한다.

힌트

보드게임 Can't Stop은 시드 잭슨이 디자인했고 여러 회사가 출판했다. 잭슨과 출판사는 이 문제를 보증하지 않으며 이 문제와 아무 관련이 없다.

예제4

  1. 예제 1

    입력
    4
    8 1 2
    1 2 3 2 4 5 4 6
    4 3 2
    1 2 3 4 5 6 7 8 9 10 11 12
    6 2 3
    10 20 50 60 70 30 40 40 30 30 20 40
    10 1 3
    2 4 3 1 4 5 3 1 1 2
    
    예상 출력
    Case #1: 1 3
    Case #2: 0 1
    Case #3: 1 5
    Case #4: 1 4
    
  2. 예제 2

    입력
    3
    1 1 2
    5
    1 4 3
    100000 1 100000 1
    2 1 2
    7 7
    
    예상 출력
    Case #1: 0 0
    Case #2: 0 0
    Case #3: 0 1
    
  3. 예제 3

    입력
    2
    4 1 2
    1 2 1 3
    6 1 2
    1 2 1 2 1 3
    
    예상 출력
    Case #1: 0 2
    Case #2: 0 4
    
  4. 예제 4

    입력
    2
    8 1 2
    7 1 2 1 5 3 4 3
    7 2 3
    1 2 3 4 5 6 7 8 9 10 11 12 13 14
    
    예상 출력
    Case #1: 1 3
    Case #2: 0 2