zoukankan      html  css  js  c++  java
  • 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. }


  • 相关阅读:
    如何写一个bat文件,让他去执行某一个地方的bat文件
    服务器加电自动开机模式设置
    第三章 线程状态
    第二章 线程安全
    第一章 线程
    多线程入门
    异常
    SSO系统介绍
    解决:Nginx访问静态页面出现中文乱码
    错误处理:java.lang.NoClassDefFoundError: javax/jms/JMSContext
  • 原文地址:https://www.cnblogs.com/sysu-zhengwsh/p/3674208.html
Copyright © 2011-2022 走看看