BZOJ5294 BJOI2018二进制(线段树)】的更多相关文章

传送门 因为每一位\(\mod 3\)的值为\(1,2,1,2,...\),也就相当于\(1,-1,1,-1,...\) 所以当某个区间的\(1\)的个数为偶数的时候,一定是可行的,只要把这若干个\(1\)放在一起就可以了. 而当某个区间的\(1\)的个数为奇数的时候,那么最优的方式显然是\(1\)和\(-1\)两两配对,剩下\(3\)个\(1\),然后留下至少\(2\)个\(0\),将\(111\)拼成\(10101\)的形式. 注意到\(1\)的个数为\(1\)的时候显然不可行. 所以合法的…
传送门 题意简述: 给出一个长度为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…
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写出来…
问题 C: 二进制 时间限制: 1 Sec  内存限制: 128 MB提交: 8  解决: 2[提交] [状态] [讨论版] [命题人:] 题目描述 pupil发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是3的倍数.他想研究对于二进制,是否也有类似的性质.于是他生成了一个长为n的二进制串,希望你对于这个二进制串的一个子区间,能求出其有多少位置不同的连续子串,满足在重新排列后(可包含前导0)是一个3的倍数.两个位置不同的子区间指开始位置不同或结束位置不同.由于他想尝试尽量多的情…
题目链接:https://www.nowcoder.com/acm/contest/211/E 题目描述 请实现一个数据结构支持以下操作:区间循环左右移,区间与,区间或,区间求和. 输入描述: 第一行n,q表示数列长度及操作次数.第二行n个数表示初始序列.接下来q行表示操作. 操作格式如下:一行表示一个操作.所有操作形如 opt l r v.opt=1 表示将区间[l,r]循环右移v位.opt=2 表示将区间[l,r]循环左移v位.opt=3 表示将区间[l,r]按位或上v.opt=4 表示将区…
[BZOJ5294][BJOI2018]二进制(线段树) 题面 BZOJ 洛谷 题解 二进制串在模\(3\)意义下,每一位代表的余数显然是\(121212\)这样子交替出现的. 其实换种方法看,就是\(1,-1,1,-1,...\) 如果询问一个二进制串能否被\(3\)整除,那么只需要考虑奇数位上的\(1\)的个数和偶数位上的\(1\)的个数就行了. 如果可以重排,我们来考虑如何分配. 首先对于一个长度为\(len\)的区间,模\(3\)余\(1\)的位有\([\frac{len+1}{2}]\…
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接着考虑奇数的情况. 如果只有\(1\)个\(1\),那么无论如何都不行,只需考虑\(3\)个\(1\)的情况,因为其他的\(1\)可以看做偶数个\(1\)的情况.不难发现,当只有\(3\)个\(1\)的时候,我们需要有至少\(2\)个\(0\),接着就可以用线段树来维护了. 我们考虑记录三个数组,\…
正解:线段树 解题报告: 传送门! 话说开始看到这题的时候我想得hin简单 因为关于%3有个性质就是说一个数的各个位数之和%3=这个数%3嘛,小学基础知识? 我就想着,就直接建一棵树,只是这棵树要用个数据结构分别存下%3=0,1,2然后大力走一波就好辣 然后我仔细思考了一下,发现因为它是要连续一个区间所以我可能这个数据结构中要有9个数 前三个不变,第四个到第六个是连着左边的%3的余数,第七个到第九个是连着右边的%3的余数,依然是大力走一波 但是我jio得应该不会出这种并没有思维难度然而实现难度又…
Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42940   Accepted: 13011 Description Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem.…