题目描述
Freda发明了传呼机之后,rainbow进一步改进了传呼机发送信息所使用的信号。
由于现在是数字、信息时代,rainbow发明的信号用N个自然数表示。
为了避免两个人的对话被大坏蛋VariantF偷听,rainbow把对话分成A、B、C三部分,分别用a、b、c三个密码加密。
现在Freda接到了rainbow的信息,她的首要工作就是解密。
Freda了解到,这三部分的密码计算方式如下:
在1~N这N个数中,等概率地选取两个数l、r,如果l>r,则交换l、r。把信号中的第l个数到第r个数取出来,构成一个数列P。
A部分对话的密码是数列P的xor和的数学期望值,xor和就是数列P中各个数异或之后得到的数; xor和的期望就是对于所有可能选取的l、r,所得到的数列的xor和的平均数。
B部分对话的密码是数列P的and和的期望,定义类似于xor和。
C部分对话的密码是数列P的or和的期望,定义类似于xor和。
请你帮忙计算这三个密码。
题目大意
有n个数,每一选取一个区间得到这些数的异或值、或值和与值;求这三项的期望。
题解
这一题的主要思路就是对二进制的每一位进行拆分枚举。这道题主要考察对期望和位运算本质的理解。
具体的说,就是每一个数都对应一个二进制数;而二进制数数中,我们可以将其看作一个n行若干列的矩阵;由于每一列中互不影响,因此我们对于每一列进行单独处理。
对于长度为1的序列,概率为 1 n 2 \frac{1}{n^2} n21;因此对于每一列,例如是从右往左是第i列,假设以0为其实列进行计数,有j个1,则对答案的贡献是: j ∗ 2 i ∗ 1 n 2 j*2^i*\frac{1}{n^2} j∗2i∗n21.
对于每一个长度不为1的序列,因为有左端点和右端点的重复选择,因此得到的概率为 2 n 2 \frac{2}{n^2} n2