位与位间互不影响。一位一位计算。

长度为 \(1\) 的区间,选出概率为 \(1/n^2\)。其余区间,选出概率为 \(2/n^2\)。(这里的区间 \(l \leq r\))

枚举右端点。记 \(last_0\) 表示 \(0\) 上一次出现的位置。 \(last_1\) 同样。

下面我们只研究区间长度不为 \(1\) 的。为 \(1\) 的话直接计上就好了。

对于 \(\mathrm{and}\) 和,倘若当前数的这一位为 \(0\) 则不用计算,否则,左端点在 \([last_0+1,now-1]\) 间的区间都是合法的,答案累计 \(2 \times 2^k \times (now-last_0-1) /n^2\)。\(now\) 是当前在枚举哪个右端点,\(k\) 是当前在枚举 \(a_{now}\) 的二进制第 \(k\) 位。

对于 \(\mathrm{or}\) 和,倘若当前数的这一位为 \(1\) 则左端点在 \([1,now-1]\) 的区间都合法,否则,在 \([1,last_1]\) 间的都合法。

对于 \(\mathrm{xor}\) 和,我们发现,所有的这一位数为 \(1\) 的数字,把数列分成了好几段。我们记 \(cnt_0\) 表示当 \(a_{now}\) 的这一位是 \(0\) 时有多少个左端点是能对答案产生贡献的。 \(cnt_1\) 同理。

如果当前这位是 \(0\),那么答案累计上 \(2 \times 2^k \times cnt_0 / n^2\) 并 \(cnt_0 \leftarrow cnt_0 + 1\)。

如果当前这位是 \(1\),那么答案累计上 \(2 \times 2^k \times cnt_1 / n^2\)。然后交换 \(cnt_0,cnt_1\) 并 \(cnt_1 \leftarrow cnt_1 + 1\)。

#include <iostream>
#include <cstdio>
using namespace std;
int n, a[100005], lst0, lst1, cnt0, cnt1;
double ansand, ansxor, ansor;
int main(){
cin>>n;
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
for(int i=0; i<=29; i++){
lst0 = lst1 = cnt0 = cnt1 = 0;
for(int j=1; j<=n; j++){
int x=(a[j]>>i)&1;
if(x){
ansand += 1.0 * (1<<i) / n / n;
ansxor += 1.0 * (1<<i) / n / n;
ansor += 1.0 * (1<<i) / n / n;
ansand += 2.0 * (j - lst0 - 1) * (1<<i) / n / n;
ansor += 2.0 * (j - 1) * (1<<i) / n / n;
ansxor += 2.0 * cnt1 * (1<<i) / n / n;
swap(cnt0, cnt1);
cnt0++;
lst1 = j;
}
else{
ansxor += 2.0 * cnt0 * (1<<i) / n / n;
ansor += 2.0 * lst1 * (1<<i) / n / n;
cnt1++;
lst0 = j;
}
}
}
printf("%.3f %.3f %.3f\n", ansxor, ansand, ansor);
return 0;
}

joyoi2020/lfyzoj114 Rainbow 的信号的更多相关文章

  1. Rainbow的信号

    Rainbow的信号 有一串长度为n的数列,现在从中等概率选出l,r,如果l大于r,则交换,有三个询问 l~r间的数与和的数学期望 l~r间的数或和的数学期望 l~r间的数异或和的数学期望 对于100 ...

  2. tyvj 2020 rainbow 的信号

    期望 被精度坑惨的我 注意:能开 long long 尽量开, 先除后乘, int 转 double 的时候 先转换在做运算 本题与位运算有关,位与位之间互不影响,所以我们可以分开考虑 #includ ...

  3. [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)

    传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...

  4. Rainbow的信号 CH3801

    题目链接 题意:求n个整数任意取一个区间,一起进行xor,and,或or的操作,求xor的期望值,and的期望值,or的期望值. 思路:区间取的左端点为l,右端点为r,当r==l时,选的概率为1/n/ ...

  5. $CH$3801 $Rainbow$的信号 期望+位运算

    正解:位运算 解题报告: 传送门! 其实就是个位运算,,,只是顺便加了个期望的知识点$so$期望的帕并不难来着$QwQ$ 先把期望的皮扒了,就直接分类讨论下,不难发现,答案分为两个部分 $\left\ ...

  6. AcWing 216 Rainbow 的信号

    题意 给定一个长度为n的序列,然后从\(1\sim N\) 这 N 个数中选取两个数\(l,r\) , 如果\(l>r\),则交换\(l,r\).把第\(l\) 个数到第\(r\)个数取出来构成 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. CH3801Rainbow的信号

    Description Freda发明了传呼机之后,rainbow进一步改进了传呼机发送信息所使用的信号.由于现在是数字.信息时代,rainbow发明的信号用N个自然数表示.为了避免两个人的对话被大坏 ...

  9. Rainbow: Combining Improvements in Deep Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1710.02298v1 [cs.AI] 6 Oct 2017 (AAAI 2018) Abstract 深度强化学习社区对D ...

随机推荐

  1. asp。Net 页面传值

    00.引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一 ...

  2. spark性能测试理论-Benchmark(转)

    一.Benchmark简介Benchmark是一个评价方式,在整个计算机领域有着长期的应用.正如维基百科上的解释“As computer architecture advanced, it becam ...

  3. 关于&0xF0的一些认识

    首先,要明白0xF0转换成二进制是多少 ----- 1111 0000(0xF0相当于高四位保留,低四位置为0) 我们拿麻将的一万(0x01).一条(0x11).一筒(0x21) 一万的二进制原码   ...

  4. RStudio的Markdown

    Title This is an R Markdown document. Markdown is a simple formatting syntax for authoring web pages ...

  5. 【Web应用-Kudu】Kudu 管理和诊断 azure web 应用

    Azure  Kudu是 GitHub 上的一个开源项目,Kudu 站点 (也称为网站控制管理 SCM) 提供了一系列的在线工具,可以帮助用户查看 web 应用的设置,诊断 web 应用,以及安装 w ...

  6. 你是猴子请来的逗比么!IT跳槽大事件

       3月招聘大战早已硝烟四起,互联网职场摇身一变成了跳蚤市场,猎头们告诉跳蚤们,跳不跳不是不问题,往哪儿跳才是重点,跳对了高薪期权都如过眼云烟.不过小编不得不说,劳资最痛恨那些跳槽的人啦!就因为加班 ...

  7. Grid Infrastructure 启动的五大问题 (文档 ID 1526147.1)

    适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 和更高版本本文档所含信息适用于所有平台 用途 本文档的目的是总结可能阻止 Grid In ...

  8. UVA - 11082 Matrix Decompressing (最大流,技巧)

    很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(x,y)看出是一条边,边的容量下界是1,所以先减去1,之后在加上就好了. 建图的时候注意分配好编号,解从残留网络中的边找 ...

  9. 理想路径——双向BFS

    题目 给n个点m条边(2 ≤ n ≤ 100000,1 ≤ m ≤ 200000)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量的少,在此前提下,经过边的颜色序列的 ...

  10. 五、Pandas玩转数据

    Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...