화장실 칸 (Small1)

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

요약
정해진 규칙에 따라 K명이 비어 있는 칸 중 가장 멀리 떨어진 자리를 고를 때, 마지막 사람이 고른 자리의 양옆 빈 칸 수를 구한다.
난이도

보통10점 중 4점

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

문제

어떤 화장실에는 칸이 한 줄로 N + 2개 있다. 양쪽 끝 칸 두 개는 화장실 관리인이 계속 쓰고 있어서 언제나 사용 중이고, 나머지 N개가 이용자의 칸이다.

사람이 화장실에 들어오면 다른 사람과 최대한 멀리 떨어진 칸을 고르려 한다. 헷갈리지 않도록 고르는 방법은 다음과 같이 정해져 있다. 빈 칸 S마다 값 두 개 LSL_S와 RSR_S를 구한다. LSL_S는 S와 왼쪽에서 가장 가까운 사용 중인 칸 사이에 있는 빈 칸의 수이고, RSR_S는 오른쪽으로 똑같이 센 값이다. 먼저 min⁡(LS,RS)\min(L_S, R_S)가 가장 큰 칸만 남긴다. 그런 칸이 하나면 그 칸을 고른다. 여러 개면 그중에서 max⁡(LS,RS)\max(L_S, R_S)가 가장 큰 칸만 다시 남기고, 그래도 여러 개가 남으면 가장 왼쪽 칸을 고른다.

K명이 화장실에 들어온다. 앞사람이 칸을 고른 다음에 뒷사람이 들어오고, 아무도 나가지 않는다.

마지막 사람이 고른 칸을 S라고 할 때, max⁡(LS,RS)\max(L_S, R_S)와 min⁡(LS,RS)\min(L_S, R_S)를 구하라.

입력

첫 줄에 테스트 케이스의 수 T가 주어진다. 다음 T개 줄에 각각 테스트 케이스 하나가 정수 N과 K로 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤K≤N1 \le K \le N
  • 1≤N≤10001 \le N \le 1000

출력

각 테스트 케이스마다 Case #x: y z를 한 줄에 출력한다. x는 테스트 케이스 번호(1부터 시작)이고, y는 마지막으로 들어온 사람이 고른 칸 S의 max⁡(LS,RS)\max(L_S, R_S), z는 min⁡(LS,RS)\min(L_S, R_S)이다.

힌트

예제의 첫 번째 테스트 케이스에서 첫 사람은 가운데 두 칸 중 왼쪽 칸을 쓴다. 사용 중인 칸을 O, 빈 칸을 .으로 적으면 O.O..O가 된다. 두 번째이자 마지막 사람은 바로 오른쪽 칸을 써서 한쪽에 빈 칸 1개, 반대쪽에 0개를 남긴다.

두 번째 테스트 케이스에서 첫 사람은 가운데 칸을 써서 O..O..O가 된다. 두 번째이자 마지막 사람은 가장 왼쪽 빈 칸을 쓴다.

세 번째 테스트 케이스에서 첫 사람은 가운데 두 칸 중 왼쪽 칸을 써서 O..O...O가 된다. 두 번째 사람은 연속한 빈 칸 세 개의 한가운데를 쓴다.

네 번째 테스트 케이스에서는 누가 어느 칸을 고르든 마지막에는 모든 칸이 찬다.

다섯 번째 테스트 케이스에서 처음이자 마지막 사람은 가운데 두 칸 중 왼쪽 칸을 고른다.

예제1

  1. 예제 1

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