CUPOJ6242: LHC的二进制升级版
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
样例输出
YES
NO
提示
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的二进制升级版的更多相关文章
- 数据库垂直拆分,水平拆分利器,cobar升级版mycat(转)
原文:数据库垂直拆分,水平拆分利器,cobar升级版mycat 1,关于Mycat Mycat情报 基于阿里的开源cobar ,可以用于生产系统中,目前在做如下的一些改进: 非阻塞IO的实现,相对于目 ...
- 认识二进制安全与漏洞攻防技术 (Windows平台)
二进制漏洞是指程序存在安全缺陷,导致攻击者恶意构造的数据(如Shellcode)进入程序相关处理代码时,改变程序原定的执行流程,从而实现破坏或获取超出原有的权限. 0Day漏洞 在计算机领域中,0da ...
- 使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...
- 如何开启MySQL 5.7.12 的二进制日志
1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log #二进制日志的文件名 server_id=1 #必须指定server_id,这是MySQL ...
- 【.net 深呼吸】使用二进制格式来压缩XML文档
在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
- 浅析MySQL基于ROW格式的二进制日志
上文分析的二进制日志实际上是基于STATEMENT格式的,下面我们来看看基于ROW格式的二进制日志,毕竟,两者对应的binlog事件类型也不一样,同时,很多童鞋反映基于ROW格式的二进制日志无法查到原 ...
- 浅析MySQL二进制日志
查看MySQL二进制文件中的内容有两种方式 1. mysqlbinlog 2. SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offs ...
- asp.net将图片转成二进制存入数据库
一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...
随机推荐
- IntelliJ IDEA 热加载
修改java文件后 win按:Ctrl+Shift+F9 mac按:cmd+Shift+F9 tomcat-maven-plugin 启动的项目也用这个快捷键热加载
- iOS Button设置
UIButton *kefuBtn = [[UIButton alloc]initWithFrame:CGRectMake(, , , )]; kefuBtn.backgroundColor = SX ...
- outer的使用
outer就是一个标签,java语言中根本没有此关键字,因此outer也可以用其它的词来代替 java中的标签就是一个紧跟着英文冒号(:)的标识符.与其他语言不同的是,java中的标签只有放在循环语言 ...
- input placeholder 兼容问题
placeholder是html5出的新特性,ie9以下是不兼容的, 那么为了兼容ie9 我们需要对他做处理 //jq的处理方式$(function(){ jQuery('[placeholder] ...
- Linux简介——(一)
1. 常见操作系统 - 服务端操作系统 : linux.unix.windows server - 单机操作系统 : windows(dos .ucdos.win95.win98.win2000.xp ...
- 详见github
本栏博客不再专门更新,详见:https://github.com/dxscjx123/LeetCode
- (十六)strtok、strtok_s、strtok_r 字符串分割函数
1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...
- 小程序2(JSSDK,ECS搭建ftp服务器)
JSSDK 开发步骤 绑定安全域名(域名绑定给任意一个公众号) 引入js 权限验证 wx.config({}) ready 所有的开发写在ready中 error 分享接口 onMenuShareTi ...
- C#面向对象(OOP)入门—第一天—多态和继承(方法重载)
面向对象是什么 面向对象是一种基于对象的编程方法,它取代了仅仅依靠方法和流程的编程方式.面向对象的编程语言中,对象(object)其实就是指特定类型.或某个类的实例.面向对象使得编程人员更容易组织和管 ...
- 17:django Email
我自己在看这一节之前自己先实现了一下,django-admin.py startproject testEmail新建一个新项目,urls.py把urlpatterns的第一行取消注释,改成url(r ...