N x N 격자 종이를 아래를 위로, 오른쪽을 왼쪽으로 번갈아 반으로 접어 1 x 1이 될 때까지 접은 뒤, 생긴 기둥을 아래에서 위로 읽은 수열에서 주어진 수 X의 위치 P를 구하거나, 주어진 위치 P에 있는 수 X를 구한다. N = 2^K이고 K는 최대 31, 질의는 최대 10000개이다.
보통7재귀분할 정복구현수학아직 제출이 없습니다시간 제한1초메모리 제한32 MB
문제 설명
예제2
문제
정사각형 칸으로 이루어진 N×N 크기의 모눈종이가 있다. N은 2의 거듭제곱이다.
칸에는 위쪽 줄부터 차례로, 한 줄 안에서는 왼쪽에서 오른쪽으로 1부터 N2까지 번호를 매긴다. 각 칸에는 그 칸의 번호만 적혀 있다.
이 종이를 반으로 접는 동작을 되풀이한다. 먼저 아래쪽 절반을 위쪽 절반 위로 접고, 그다음 오른쪽 절반을 왼쪽 절반 위로 접는다. 접힌 종이가 1×1 크기가 될 때까지 두 동작을 이 순서로 번갈아 수행한다.
다 접고 나면 칸은 1×1×N2 크기의 기둥을 이룬다. 이 기둥을 맨 아래 칸부터 맨 위 칸까지 읽어서 얻은 번호의 수열을 S=⟨S1,S2,…,SP,…,SN2⟩이라고 하자. P는 수열에서의 위치를 뜻한다.
지루한 회의에 앉아 있던 개발자가 종이를 접어 이런 기둥을 만들면서 다음 두 질문의 답을 구하려고 한다.
1번 질문. 번호 X가 주어진다. 이 번호는 수열 S의 몇 번째 위치 P에 있는가?
2번 질문. 수열 S의 위치 P가 주어진다. 이 위치에 있는 번호 X는 무엇인가?
질문의 종류에 따라 번호 X 또는 위치 P를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 질문의 개수 Q가 주어진다. 다음 Q개의 줄에는 각각 세 정수 T, K, V가 공백 하나로 구분되어 주어진다.
T는 질문의 종류이다. T=1 또는 T=2이다.
K는 종이의 크기를 정하는 지수이다. 종이의 크기는 N=2K이다.
V는 T=1이면 번호 X이고, T=2이면 위치 P이다.
출력
질문마다 한 줄씩, 모두 Q개의 줄을 출력한다. 각 줄에는 질문의 종류에 따라 위치 P 또는 번호 X를 정수 하나로 출력한다.
제한
1≤Q≤10000
1≤T≤2
0≤K≤31
1≤X,P≤N2, 여기서 N=2K이다.
힌트
N=2일 때 기둥을 아래에서 위로 읽으면 S=⟨1,3,4,2⟩이다.
N=4일 때는 S=⟨1,13,16,4,8,12,9,5,6,10,11,7,3,15,14,2⟩이다.