#1408. 正方形划分(square)

正方形划分(square)

【题目描述】

小可可发明了一种新的正方形划分方法。

首先我们有一个正方形,我们称该图形为第 0 轮的图形。我们将这个正方形均匀划

分成 4 个部分——左上、右上、左下和右下,分别将其编号为 ABCD,称新的图形为第1 轮的图形。 image

我们再将第一个图形所划分的每一个部分 ABCD,分别再分成 4 个部分,称新的图

形为第 2 轮的图形。对于该图形的每个部分的命名方式为该部分所属第 1 轮的部分的

编号 + ABCD。如:原来第 1 轮的 A 部分的右上部分的编号为 AB。

image

第 3 轮及以上的图形以此类推。这样每个方格都有一个编号,同时也有一个位置,即第几行(从上往下数)第几列(从左往右数)。现在小可可想实现编号与其位置的相互转化,请你写一份程序帮帮他。

【输入格式】

从 square.in 输入。

本题有多组测试数据,输入第一行一个整数 T 表示测试数据组数,接下来输入每

组数据。

对于每组测试数据共一行,有以下两种可能:

0 n x y 表示该测试数据需要求出第 n 轮的图形中第 x 行第 y 列的格子的编号。

1 str 表示该测试数据需要求出编号为 str 的格子的位置。

如果仍然对输入方式不够清楚,可以去观察输入输出样例和样例解释。

【输出格式】

向 square.out 输出。

对于每组测试数据:

如果输入的测试数据为 0 n x y 的形式,输出一行一个字符串 str 表示该格子编

号。

如果输入的测试数据为 1 str 的形式,输出一行三个整数 n, x, y 表示该格子位于

第 n 轮图形的第 x 行第 y 列。

【输入输出样例 1】

【输入样例】

3

0 1 2 1

1 AB

0 2 3 4

【输出样例】

C

2 1 2

DB

【样例解释】

第一行一个整数 3 表示我们一共有三组测试数据。

第一组测试数据 0 1 2 1,表示我们要将第 1 轮图形的第 2 行第 1 列的位置转化

为编号,根据题意描述中的图可知编号为 C。

4第二组测试数据 1 AB,表示我们要求出编号为 AB 的格子的位置,根据题意描述中

的图可知它在第 2 轮第 1 行第 2 列。

第三组测试数据 0 2 3 4,表示我们要将第 2 轮图形的第 3 行第 4 列的位置转化

为编号,根据题意描述中的图可知编号为 DB。

【输入输出样例 2/3/4/5/6/7】

详见选手文件夹下的 square/square*.in/ans 文件。

【约定和数据范围】

数据点 1,1 ≤ T ≤ 10, 1 ≤ n ≤ 2。

数据点 2, 3,1 ≤ T ≤ 10, 1 ≤ n ≤ 10。

数据点 4, 5,1 ≤ T ≤ 5 × 10^4^ , n = 10,即保证所有图形均为第 10 轮图形。

数据点 6,1 ≤ T ≤ 5 × 10^4^ , 1 ≤ n ≤ 30,询问仅形如 0 n x y。

数据点 7,1 ≤ T ≤ 5 × 10^4^ , 1 ≤ n ≤ 30,询问仅形如 1 str。

数据点 8 ∼ 10,1 ≤ T ≤ 5 × 10^4^ , 1 ≤ n ≤ 30。

样例