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

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

Mod-3 순열

면접 대비

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

요약
값과 위치를 3으로 나눈 나머지로 세어 바로 맞바꿀 쌍부터 처리하고 남은 세 자리는 두 번씩 교환합니다.
난이도

보통10점 중 5점

유형
그리디, 수학, 배열
정답자
아직 제출이 없습니다

문제

정수 0,1,…,n−10, 1, \dots, n-1을 한 번씩 나열한 순열 p0,p1,…,pn−1p_0, p_1, \dots, p_{n-1}이 모든 인덱스 ii에서 pi mod 3=i mod 3p_i \bmod 3 = i \bmod 3을 만족하면, 이 순열을 mod-3 순열이라고 한다. 예를 들어 3, 1, 5, 0, 4, 2는 mod-3 순열이지만 1, 2, 0, 4, 5, 3은 mod-3 순열이 아니다.

순열이 하나 주어진다. 한 번의 연산에서 서로 다른 두 인덱스를 골라 그 두 위치의 값을 교환할 수 있다. 주어진 순열을 mod-3 순열로 바꾸는 데 필요한 최소 연산 횟수를 구하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 1≤T≤1000001 \le T \le 100000이다.

각 테스트 케이스는 두 줄이다. 첫째 줄에 정수 nn이 주어지고, 둘째 줄에 공백 하나로 구분된 nn개의 정수가 주어진다. 이 nn개의 정수는 0,1,…,n−10, 1, \dots, n-1의 순열이다. nn은 3≤n≤5013 \le n \le 501을 만족하며 항상 3의 배수다.

출력

각 테스트 케이스마다 Case #x: M 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, M은 주어진 순열을 mod-3 순열로 바꾸는 데 필요한 최소 교환 횟수다.

예제1

  1. 예제 1

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