码迷,mamicode.com
首页 > 其他好文 > 详细

CH3801 Rainbow的信号 期望+位运算

时间:2019-05-04 11:27:48      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:ora   部分   快速   长度   就会   line   但我   不难   不为   

正解:位运算

解题报告:

传送门!

其实就是个位运算,,,只是顺便加了个期望的知识点$so$期望的帕并不难来着$QwQ$

先把期望的皮扒了,就直接分类讨论下,不难发现,答案分为两个部分

$\left\{\begin{matrix}l=r & \frac{1}{n}\cdot\frac{1}{n}=\frac{1}{n^{2}}\\ \\ l\neq r & \frac{2}{n}\cdot\frac{1}{n}=\frac{2}{n^{2}}\end{matrix}\right.$

这样就只要求出值,然后乘以概率就得到期望辽$QwQ$

然后现在的问题就变成了,怎么快速求出所有区间的$xor$和,$and$和,$or$和

可以发现每一位互不影响,所以对每一位都扒出来,然后单独看这一位,只要能求出这一位中有多少个子区间满足通过$xor$/$and$/$or$运算之后是1,乘以$2^{k}$即可

(啊这儿说下,,,因为$l=r$的情况直接枚举每一个数直接算就好,$so$下面所有讨论的都是$l\neq r$的来着

先说$and$和趴,考虑先枚举一个右端点$r$,考虑$and$的性质,所以考虑找到前面第一个0出现的位置$lst_{0}$,如果这一位也为1,那么左端点就可以取$[lst_{0}+1,r-1]$,就欧克了

对于$or$和的话,依然考虑枚举右端点$r$,找到前一个1出现的位置$lst_{1}$,如果这一位为1,那么左端点可以取$[1,r-1]$,如果这一位不为0,那么左端点可以取$[1,lst_{1}]$

最后说下$xor$和,因为这个相对而言复杂一些$so$放到最后港$QwQ$

首先依然是枚举右端点$r$,因为$xor$的性质,所以考虑找到所有为1的点,然后根据这些点进行黑白染色,就会是左端点可以取所有白段($umm$其实因为我都还麻油说黑白色是染啥$but$意会下能$get$的趴,,,懒得详细说了,画图应该会好理解些但我懒得画鸭$QAQ$

然后考虑怎么递推,不难发现,从$r$变成$r+1$,首先会是黑段长度++,然后这儿要分类讨论下,就当$r$点是1的时候,要交换下黑段和白段的长度,意会下,非常显然不想详细港了

综上,这题做完辽

具体看代码趴$QAQ$

代码咕了你信喵,,,

CH3801 Rainbow的信号 期望+位运算

标签:ora   部分   快速   长度   就会   line   但我   不难   不为   

原文地址:https://www.cnblogs.com/lqsukida/p/10807775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!