만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

인접한 연속 숫자

시간 제한40초메모리 제한1024 MB

요약
두 플레이어가 번호가 적힌 타일을 N칸짜리 줄에 번갈아 놓을 때, 각 플레이어가 상대에게 필승 상태를 넘겨준 수를 셉니다.
난이도

보통10점 중 6점

유형
게임 이론, 구현
정답자
아직 제출이 없습니다

문제

두 플레이어 A와 B가 게임을 한다. 게임에는 1번부터 N번까지 번호가 붙은 타일 N개와, 가로로 한 줄로 늘어선 빈 칸 N개로 이루어진 보드가 쓰인다.

플레이어는 번갈아 두며, A가 먼저 둔다. 한 번의 차례에 플레이어는 아직 쓰지 않은 타일 하나를 고르고, 빈 칸 하나를 골라 그 칸에 타일을 놓는다. 게임이 끝났을 때 인접한 두 칸에 연속된 번호의 타일이 두 개 있으면 A가 이긴다. 누가 놓았는지는 상관없다. 그렇지 않으면 B가 이긴다. 예를 들어 최종 보드가 1 2 3 4나 4 1 3 2이면 A의 승리이고, 3 1 4 2이면 B의 승리이다. 연속된 번호는 어느 순서로 나란히 있어도 된다.

방금 두 플레이어가 게임하는 것을 지켜봤지만 전략을 이해할 수 없었다. 합리적으로 두지 않았을 수도 있다. 각 수를 최적 전략과 비교해 보려고 한다.

필승 상태는 차례인 플레이어가 최적으로 두면 상대가 무엇을 하든 이길 수 있는 게임 상태이다. 실수는 필승 상태에서 둔 수 가운데, 그 결과 상대의 다음 차례가 필승 상태가 되는 수이다. (게임의 마지막 차례에는 실수가 나올 수 없다. 마지막 차례가 그 플레이어의 필승 상태에서 시작했다면, 그 플레이어의 유일한 수가 승리로 이어진 것이기 때문이다.)

N개의 수가 주어질 때, 각 플레이어가 저지른 실수의 횟수를 세어라.

입력

첫 줄에 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 나온다. 각 케이스는 게임에서 쓰이는 타일의 수이자 차례의 수, 보드 칸의 수인 정수 N이 적힌 한 줄로 시작한다.

그 뒤로 N개의 줄이 이어진다. i번째 줄(1부터 셈)에는 정수 Mi와 Ci가 주어진다. 각각 i번째 차례에 고른 타일의 번호와, 그 타일을 놓은 칸의 번호(왼쪽 끝을 1, 오른쪽 끝을 N으로 셈)를 나타낸다.

i가 홀수이면 A의 차례이고, 짝수이면 B의 차례이다.

출력

각 테스트 케이스마다 Case #x: a b 형식으로 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작), a는 A가 저지른 실수의 총 횟수, b는 B가 저지른 실수의 총 횟수이다.

제한

  • 1 ≤ T ≤ 100.
  • 모든 i에 대해 1 ≤ Mi ≤ N.
  • i ≠ j이면 Mi ≠ Mj.
  • 모든 i에 대해 1 ≤ Ci ≤ N.
  • i ≠ j이면 Ci ≠ Cj.

힌트

게임은 언제나 A의 필승 상태에서 시작한다. 예를 들어 A는 2번 타일을 두 번째 칸에 둘 수 있다. B가 어떤 수를 두더라도 1번과 3번 타일 중 적어도 하나는 아직 쓰지 않았고, 1번과 3번 칸 중 적어도 하나는 비어 있다. 그러면 A가 그 타일과 칸 중 하나를 골라 두면, 나머지 진행과 상관없이 A의 승리가 확정된다.

예제1

  1. 예제 1

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