• 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 ", x, y);
    15. }
    16. return0;
    17. }


  • 相关阅读:
    Thinkd Pad打开无线网络方法
    模式问题
    SQL数据库,使用事务执行增删改操作,给自己一个后悔的机会
    iOS开发-数据库FMDB队列
    iOS开发-数据库FMDB简单介绍
    iOS开发-地图定位 CoreLocation地理编码
    iOS开发-网络篇 文件的上传
    iOS开发-项目新特性
    iOS开发-Xcode插件管理工具Alcatraz的安装和使用
    iOS开发-AFNetworking 怎样上传数据? 怎样上传模拟表单
  • 原文地址:https://www.cnblogs.com/sysu-zhengwsh/p/3674208.html
Copyright © 2020-2023  润新知