zoukankan      html  css  js  c++  java
  • HDUOJ----旋转的二进制

    旋转的二进制

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 46   Accepted Submission(s) : 10

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    Problem Description

    给定一个自然数M,及其二进制长度N,得到一个N位的二进制串
        b1 b2 ... bN-1 bN

    将该串做左旋转,即b1移到bN后面,得到一个新的二进制串:
        b2 b3 ... bN-1 bN b1

    对新的二进制串再做左旋转,得二进制串
        b3 b4 ... bN-1 bN b1 b2

    重复旋转操作操作,可得N个二进制串,对这N个串排序,可得一个N*N的矩阵.
    例如:
    1 0 0 0 1->0 0 0 1 1->0 0 1 1 0->0 1 1 0 0->1 1 0 0 0
    对它们做排序,得矩阵

        0 0 0 1 1
        0 0 1 1 0
        0 1 1 0 0
        1 0 0 0 1
        1 1 0 0 0  

    问:给出一个自然数M,及其二进制长度N,求出排序矩阵的最后一列。
    对于上面的例子,给出M=3,N=5,要你的程序输出10010。

    补充说明:存在自然数M的二进制表达超过N位的情况,在这种情况下,取前N次循环的二进制串排序后的最后一列即可。

    Input

    第一行有一个自然数K,代表有K行测试数据(K<=1000)。
    第二行至第K+1行,每行的第一个为自然数M,第二个为二进制长度N(N<64)。

    Output

    输出K行,每行N个二进制,表示矩阵最后一列从上到下的二进制。

    Sample Input

    3
    3 5
    4 7
    1099512709120 45

    Sample Output

    10010
    1000000
    110000000000000000000000000000100000000000000
    

    Source

    CodingTrip - 携程编程大赛 (预赛第一场)

    题意不明确,到底超过了n之后全保留排序结果是挫的,截取后面的n位反而是对的...

     这道题还恶心,居然m要用unsigned __Int64

    代码: 

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    char str[68][100];
    int cmp(const void *a , const void *b)
    {
        return strcmp((char *)a ,(char *)b);
    }
    int main()
    {
        int test,nn,i,j;
       unsigned __int64 m;
        scanf("%d",&test);
        while(test--)
        {
            scanf("%I64d%d",&m,&nn);
            memset(str,'0',sizeof(str));
         i=nn-1;
        while(m>0)
         {
            if(m&1) str[0][i]='1';
            m>>=1L;
            i--;
            if(i<0) break;
         }
         for(i=1;i<nn;i++)
         {
             for(j=0;j<nn;j++)
             {
              str[i][j]=str[i-1][(j+1)%nn];
             }
         }
         qsort(str,nn,sizeof(str[0]),cmp);
         for(i=0;i<nn;i++)
             printf("%c",str[i][nn-1]);
         putchar(10);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    php 表单的活用
    PHP 内存的分布问题
    php 半角与全角相关的正则
    解决 U盘安装Windows Server 2012 R2 报错 Windows 无法打开所需的文件 Sourcesinstall.wim
    VS2010或2012中,如何设置代码格式化?
    变色龙引导安装黑苹果 遇到的问题的解决办法
    Ozmosis实现BIOS直接启动Yosemite,基本完美
    MMTool制作Ozmosis引导BIOS完美引导OS X系统
    黑苹果安装步骤
    win8.1 usb3 速度慢的解决方法
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3657562.html
Copyright © 2011-2022 走看看