codingtrip 携程网赛第一场

69 篇文章 0 订阅
35 篇文章 0 订阅

题目链接

http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1004&cid=23003

旋转的二进制

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 153   Accepted Submission(s) : 36
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 - 携程编程大赛 (预赛第一场)


直接暴力模拟 = =

意思是把m的值变成2进制 并且位数长度为N不足用0补齐

然后左旋这个数串 形成新的数串 每次左旋1个 然后不断左旋n - 1次

然后这样生成了n行长度为n的数串 然后对这n个数串按照从小到大的排序

形成了一个n*n的矩阵 然后要求输出最后一列的数据


注意用位运算在换2进制

然后存在一个字符串里

对于每次左旋的字符串我又放在一个向量里 然后进行排序(你会发现从小到大排序实际上就是字符串的大小)

然后直接输出每个字符串的最后一个元素就好


ac代码

http://paste.ubuntu.com/7231529/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值