[bzoj5294]二进制】的更多相关文章

首先可以发现$2^k$模3意义下有循环节,也就是1,-1,1,-1--考虑对于x个1,y个0,判断是否存在3的倍数1.x为偶数时一定可以,选择等量的1和-1即可2.x为奇数,要满足$x\ge 3$且$y\ge 2$,这是可以用3个0*(-1)和3个1*1来抵消掉(如果y=2时也可以,因为此时总共有奇数位),同时$x-3$显然为偶数看上去难以维护,考虑反过来,求不是3的倍数的区间个数,那么即要求$x=1$或x为奇数且$y=0/1$线段树维护区间,对于每一个区间维护0的数量,1的数量和一个三维数组a…
[BZOJ5294][BJOI2018]二进制(线段树) 题面 BZOJ 洛谷 题解 二进制串在模\(3\)意义下,每一位代表的余数显然是\(121212\)这样子交替出现的. 其实换种方法看,就是\(1,-1,1,-1,...\) 如果询问一个二进制串能否被\(3\)整除,那么只需要考虑奇数位上的\(1\)的个数和偶数位上的\(1\)的个数就行了. 如果可以重排,我们来考虑如何分配. 首先对于一个长度为\(len\)的区间,模\(3\)余\(1\)的位有\([\frac{len+1}{2}]\…
传送门 题意简述: 给出一个长度为nnn的二进制串. 你需要支持如下操作: 修改每个位置:1变0,0变1 询问对于一个区间的子二进制串有多少满足重排之后转回十进制值为333的倍数(允许前导000). 思路: 考虑一个xxx位的包含有yyy个111的二进制串,它是333的倍数当如下任意一个条件成立: yyy是偶数. yyy是大于111的奇数且x−y>=2x-y>=2x−y>=2 emmmmemmmmemmmm感觉不是很好维护. 于是我们正难则反,跑去求不合法的方案数,这个二进制串不合法如下…
二进制数能被3整除相当于奇数.偶数位上1的个数模3同余.那么如果有偶数个1,一定存在重排方案使其合法:否则则要求至少有两个0且至少有3个1,这样可以给奇数位单独安排3个1. 考虑线段树维护区间内的一堆东西,合并两节点时计算跨过区间中点的答案.可以对每个节点记录f[0/1][0/1][0/1][0/1/2]表示前/后缀,异或和为0/1,是否至少出现了两个1,出现了0/1/超过2个0.大力讨论即可. 成功写了一晚上才不是因为要补十几面数学作业 #include<iostream> #include…
问题 C: 二进制 时间限制: 1 Sec  内存限制: 128 MB提交: 8  解决: 2[提交] [状态] [讨论版] [命题人:] 题目描述 pupil发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是3的倍数.他想研究对于二进制,是否也有类似的性质.于是他生成了一个长为n的二进制串,希望你对于这个二进制串的一个子区间,能求出其有多少位置不同的连续子串,满足在重新排列后(可包含前导0)是一个3的倍数.两个位置不同的子区间指开始位置不同或结束位置不同.由于他想尝试尽量多的情…
传送门 因为每一位\(\mod 3\)的值为\(1,2,1,2,...\),也就相当于\(1,-1,1,-1,...\) 所以当某个区间的\(1\)的个数为偶数的时候,一定是可行的,只要把这若干个\(1\)放在一起就可以了. 而当某个区间的\(1\)的个数为奇数的时候,那么最优的方式显然是\(1\)和\(-1\)两两配对,剩下\(3\)个\(1\),然后留下至少\(2\)个\(0\),将\(111\)拼成\(10101\)的形式. 注意到\(1\)的个数为\(1\)的时候显然不可行. 所以合法的…
BJOI的题目感觉有点难写 题目分析: 首先推一波结论.接下来的一切都在模3意义下 现在我们将二进制位重组,不难发现的是2^0≡1,2^1≡2,2^2≡1,2^3≡2....所以我们考虑这样的式子 2*a+b≡0 mod 3 其中a+b为某个区间的1的个数,令它为tot.试着带几个值看看. 2*1+1+3k≡0; 2*2+2+3k≡0; 2*3+0+3k≡0; 可以发现a和b实际上在任何时候都有a≡b.也就是说a≡tot-a. 这等价于2*a≡tot.对于每一个tot,我们把它对应最好的a写出来…
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接着考虑奇数的情况. 如果只有\(1\)个\(1\),那么无论如何都不行,只需考虑\(3\)个\(1\)的情况,因为其他的\(1\)可以看做偶数个\(1\)的情况.不难发现,当只有\(3\)个\(1\)的时候,我们需要有至少\(2\)个\(0\),接着就可以用线段树来维护了. 我们考虑记录三个数组,\…
有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)       按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsi…
1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL 5.7.3以后的要求 binlog-do-db=yrld   #备份的数据库名,可以是多个 binlog-do-db=website binlog-do-db=yrldgold  完整内容:------------------------------------------------------…