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. }


转载于:https://www.cnblogs.com/sysu-zhengwsh/p/3674208.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值