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

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

종이 접기: 직각의 좌표

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

요약
U와 L로 이루어진 접기 순서가 주어질 때, 펼친 종이띠의 m번째 점(끝점 또는 직각)의 좌표를 구한다.
난이도

보통10점 중 6점

유형
재귀, 분할 정복, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

종이 띠 하나가 있고, 다음 두 가지 방법 중 하나로 접을 수 있습니다.

  • 위 접기(upper fold): 종이의 오른쪽 끝을 왼쪽 끝의 위로 넘겨 접습니다.
  • 아래 접기(lower fold): 종이의 오른쪽 끝을 왼쪽 끝의 아래로 넘겨 접습니다.

아래 그림은 두 종류의 접기를 보여 줍니다.

위 접기와 아래 접기

종이를 여러 번 접은 뒤, 모든 접힌 자국(주름)을 90∘90^\circ 직각이 되도록 다시 펼칩니다. 아래 예시는 위 접기, 그다음 아래 접기, 마지막으로 펼친 결과를 보여 줍니다.

접었다가 펼친 결과

펼친 종이의 왼쪽 끝을 원점 (0,0)(0,0)에 두고, 첫 번째 직각을 (1,0)(1,0)에 둡니다. 그러면 두 번째 직각은 어디에 있을까요? 세 번째는요? 종이의 반대쪽 끝은 어디에 놓일까요? 접기 순서와 위치 번호가 주어질 때, 지정된 점의 좌표를 구하세요.

입력

첫째 줄에 테스트 케이스의 개수 정수 TT가 주어집니다.

이어지는 TT개의 줄에는 각각 하나의 테스트 케이스가 주어집니다. 각 줄은 위 접기와 아래 접기의 순서를 나타내는 문자 U와 L로 이루어진 문자열과, 그 뒤의 정수 mm으로 구성됩니다. 문자열의 길이는 11 이상 3030 이하입니다.

문자열이 nn번의 접기를 나타내면, 펼친 종이는 2n2^n개의 단위 선분으로 이루어지므로 양쪽 끝과 모든 직각은 0,1,…,2n0, 1, \dots, 2^n의 위치를 차지합니다. mm은 그중 하나를 고릅니다.

  • m=0m = 0은 왼쪽 끝이며 (0,0)(0,0)에 있습니다.
  • m=2nm = 2^n은 종이의 오른쪽 끝입니다.
  • 1≤m≤2n−11 \le m \le 2^n - 1인 mm은 왼쪽에서부터 센 직각을 가리킵니다(m=1m = 1이 첫 번째 직각입니다).

출력

각 테스트 케이스마다, 요청한 직각 또는 끝점의 좌표를 한 줄에 (x,y) 형식으로 출력합니다. 즉 여는 괄호, 정수 xx, 앞뒤 공백이 없는 쉼표, 정수 yy, 닫는 괄호 순서입니다.

접기가 nn번이면 종이의 길이가 2n2^n이라고 가정하며, 따라서 이웃한 주름 사이의 거리는 정확히 11 단위입니다.

예제5

  1. 예제 1

    입력
    3
    UL 4
    UL 3
    LLUL 13
    
    예상 출력
    (2,0)
    (2,-1)
    (1,-2)
    
  2. 예제 2

    입력
    3
    U 0
    U 1
    U 2
    
    예상 출력
    (0,0)
    (1,0)
    (1,1)
    
  3. 예제 3

    입력
    3
    L 0
    L 1
    L 2
    
    예상 출력
    (0,0)
    (1,0)
    (1,-1)
    
  4. 예제 4

    입력
    5
    UU 0
    UU 1
    UU 2
    UU 3
    UU 4
    
    예상 출력
    (0,0)
    (1,0)
    (1,1)
    (0,1)
    (0,2)
    
  5. 예제 5

    입력
    4
    LUL 0
    LUL 4
    LUL 7
    LUL 8
    
    예상 출력
    (0,0)
    (2,0)
    (2,-1)
    (2,-2)