PY的宝藏

Description

有一天, PY找到了一张藏宝图. 这张地图被划分成 2^n * 2^n 个格子.左上角的格子的坐标为 (0, 0) 而右下角格子的坐标为 (2^n-1, 2^n-1). 如下:

 

(0, 0)

(0, 1)

……

(0, 2^n-1)

……

……

……

……

(2^n-2, 0)

(2^n-2,1)

……

(2^n-2, 2^n-1)

(2^n-1, 0)

(2^n-1,1)

……

(2^n-1, 2^n-1)

 

幸运地他发现了一条密文, 这是一条长度为N的序列, 旁边的注释说道: 

           "重复这些动作N次你就会找到宝藏:

1、将地图分成 四个2^(n-1) * 2^(n-1) 的部分:左上角的部分编号为 0, 右上角的部分编号为1, 左下角的部分编号为 2 , 而右下角的部分编号为3

                2、按照序列的第一个数字来选择你要继续搜寻的部分.

                3、删去序列的第一个数字

                4、将N减去1

          最后你将到达宝藏的所在"

        

我们怎能忍心让PY继续做卢瑟? 这就是他命运的转折点, 让我们助他成为高富帅.

Input

输入的第一行是一个整数T, 代表输入数据的组数.

对于每组数据,这里只有一行, 包括一个整数N(1<=n<=31)和一个长度为N的序列 (这个序列只包括‘0’, ‘1’, ‘2’ , ’3’).

Output

对于每组数据, 输出X和Y, 即宝藏所在地的坐标.

 

Sample Input
 Copy sample input to clipboard
3
1 3
2 00
2 01
Sample Output
1 1
0 0
0 1





  1. #include<stdio.h>
  2. int main(){
  3. int n, m, test, i, j, k, x, y;
  4. char st[100];
  5. scanf("%d",&test);
  6. while(test--){
  7. scanf("%d%s",&n, st);
  8. x =0; y =0;
  9. for(i =0; i < n; i++){
  10. k = st[i]-'0';
  11. x =(x <<1)+(k >>1);
  12. y =(y <<1)+(k &1);
  13. }
  14. printf("%d %d\n", x, y);
  15. }
  16. return0;
  17. }


posted on 2014-04-18 22:39  左手代码右手诗  阅读(137)  评论(0编辑  收藏  举报