6242: LHC的二进制升级版

  • 时间限制:1秒
  • 内存限制:128MB
  • Special Judge
  • 提交:6
  • 正确:3

题目描述

在发现了3的二进制特殊性质后,LHC认为形如1、3、7、15......2n−1之类的数具有共通的性质。但是他太懒了,请你帮他验证结论吧。
现在,LHC要求你在1s内判断对于给定多组的二进制数num是否是2n−1的倍数。

输入

多组数据,每组数据一行,包含一个二进制数num和整数n。
数据限制:
1≤len(num)≤10000
1≤n≤32
其中len(num)代表二进制数num的长度。

输出

每组数据输出一行,如果num是2n−1的倍数,输出“YES”,否则输出“NO”。

样例输入

1111 4
101000111 3

样例输出

提示

1111(2)=15(10),15 mod 15=01111(2)=15(10),15 mod 15=0
101000111(2)=327(10),327 mod 7=5101000111(2)=327(10),327 mod 7=5

来源

LHC

Solution:

先考虑n=2,即mod=3的情况,上篇博客中有讲到把num两位两位拆分再求和得到sum,判断sum是否为mod的倍数即可。

那么,对于任意正整数n,mod=2^n-1,很容易想到把num按n位拆分再求和得到sum,判断sum是否为mod的倍数就好啦。

我居然写起了自己题目的题解,可还行,下面是三个标程。

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <fstream>
#include <time.h>
#define P(n) cout<<n<<'\n'
#define range(i,a,b) for(auto i=a;i<=b;++i)
#define LL long long
#define ULL unsigned long long
#define elif else if
#define itrange(i,a,b) for(auto i=a;i!=b;++i)
#define rerange(i,a,b) for(auto i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
#define IOS ios::sync_with_stdio(false);cin.tie(0)
using namespace std;
string word;
LL n;
void init(){ }
void solve(){
while(cin>>word>>n){
LL ans=, mod=(1LL<<n)-;
while(!word.empty()){
LL pos=;
range(i,,n)if(!word.empty()){
ans=(ans+(word.back()-'')*pos)%mod;
pos<<=;
word.pop_back();
}
}
cout<<(ans%mod?"NO":"YES")<<'\n';
}
}
int main() {
init();
solve();
return ;
}

C++标程

#这个有点偷懒了,不过它可以验证结论的正确性(我想了一晚上怎么把这个AC代码卡掉,但是失败了。。)
while True:
try:
ss,n=input().split()
ss=int(ss,2)
n=(1<<int(n))-1
print("NO" if ss%n else "YES")
except:
break

Python标程1

#这个是正经的Python解法。。
while True:
try:
tb, n = input().split()
n = int(n)
tb = tb[::-1]
mod = (1 << n) - 1
tb += '' * (n - len(tb) % n)
tmp = 0
for i in range(0, len(tb), n):
tmp = (tmp + int(tb[i:i + n][::-1], 2)) % mod
print("NO" if tmp % mod else "YES")
except:
break

Python标程2

CUPOJ6242: LHC的二进制升级版的更多相关文章

  1. 数据库垂直拆分,水平拆分利器,cobar升级版mycat(转)

    原文:数据库垂直拆分,水平拆分利器,cobar升级版mycat 1,关于Mycat Mycat情报 基于阿里的开源cobar ,可以用于生产系统中,目前在做如下的一些改进: 非阻塞IO的实现,相对于目 ...

  2. 认识二进制安全与漏洞攻防技术 (Windows平台)

    二进制漏洞是指程序存在安全缺陷,导致攻击者恶意构造的数据(如Shellcode)进入程序相关处理代码时,改变程序原定的执行流程,从而实现破坏或获取超出原有的权限. 0Day漏洞 在计算机领域中,0da ...

  3. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  4. 如何开启MySQL 5.7.12 的二进制日志

    1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL ...

  5. 【.net 深呼吸】使用二进制格式来压缩XML文档

    在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...

  6. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析

    以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...

  7. 浅析MySQL基于ROW格式的二进制日志

    上文分析的二进制日志实际上是基于STATEMENT格式的,下面我们来看看基于ROW格式的二进制日志,毕竟,两者对应的binlog事件类型也不一样,同时,很多童鞋反映基于ROW格式的二进制日志无法查到原 ...

  8. 浅析MySQL二进制日志

    查看MySQL二进制文件中的内容有两种方式 1.  mysqlbinlog 2.  SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offs ...

  9. asp.net将图片转成二进制存入数据库

    一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...

随机推荐

  1. 设置zookeeper开机自启动

    1.进入到/etc/init.d目录下,新建一个zookeeper脚本 cd /etc/init.d vi zookeeper #!/bin/bash #chkconfig:2345 20 90 #d ...

  2. redis启动脚本

    #!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the ...

  3. Asp.net Web Api 2 FORM Authentication Demo

    最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...

  4. Jmeter-12-如何使用Plugin Manager

    1. 搜索 Jmeter plugin 并找到plugin manager 下载jar文件 2. 放到jmeter/lib/ext下面, 重启jmeter 3. 找到选项-> Plugin ma ...

  5. 【Luogu】P3927 SAC E#1 - 一道中档题 Factorial

    [题目]洛谷10月月赛R1 提高组 [题意]求n!在k进制下末尾0的个数,n<=1e18,k<=1e16. [题解]考虑10进制末尾0要考虑2和5,推广到k进制则将k分解质因数. 每个质因 ...

  6. 20155335俞昆《java程序设计》第三周总结

    20155335  2006-2007-2  <Java程序设计>第三周学习总结 ##  教材学习内容总结 首先,关键是区基本类型和类类型,,产生对象必须定义类,类是一个概念,并不存在,对 ...

  7. 内存分配器memblock【转】

    转自:http://blog.csdn.net/kickxxx/article/details/54710243 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 背景 Data ...

  8. Linux kernel suspend resume学习:2.6.35与3.0.35比较【转】

    转自:http://blog.csdn.net/njuitjf/article/details/18317149 Linux kernel suspend resume学习:2.6.35与3.0.35 ...

  9. VPS性能综合测试(6):UnixBench跑分工具测试

    测试时间可能会比较长,请耐心等待.最后UnixBench会详细列出各个测试项目的得分情况,以及VPS性能的综合跑分结果 UinxBench 的使用 使用方法如下: Run [ -q | -v ] [- ...

  10. XMLDocument 方法中实现post发送消息

    XMLDocument 方法中实现post发送消息