joyoi2020/lfyzoj114 Rainbow 的信号
位与位间互不影响。一位一位计算。
长度为 \(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 的信号的更多相关文章
- Rainbow的信号
Rainbow的信号 有一串长度为n的数列,现在从中等概率选出l,r,如果l大于r,则交换,有三个询问 l~r间的数与和的数学期望 l~r间的数或和的数学期望 l~r间的数异或和的数学期望 对于100 ...
- tyvj 2020 rainbow 的信号
期望 被精度坑惨的我 注意:能开 long long 尽量开, 先除后乘, int 转 double 的时候 先转换在做运算 本题与位运算有关,位与位之间互不影响,所以我们可以分开考虑 #includ ...
- [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)
传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...
- Rainbow的信号 CH3801
题目链接 题意:求n个整数任意取一个区间,一起进行xor,and,或or的操作,求xor的期望值,and的期望值,or的期望值. 思路:区间取的左端点为l,右端点为r,当r==l时,选的概率为1/n/ ...
- $CH$3801 $Rainbow$的信号 期望+位运算
正解:位运算 解题报告: 传送门! 其实就是个位运算,,,只是顺便加了个期望的知识点$so$期望的帕并不难来着$QwQ$ 先把期望的皮扒了,就直接分类讨论下,不难发现,答案分为两个部分 $\left\ ...
- AcWing 216 Rainbow 的信号
题意 给定一个长度为n的序列,然后从\(1\sim N\) 这 N 个数中选取两个数\(l,r\) , 如果\(l>r\),则交换\(l,r\).把第\(l\) 个数到第\(r\)个数取出来构成 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- CH3801Rainbow的信号
Description Freda发明了传呼机之后,rainbow进一步改进了传呼机发送信息所使用的信号.由于现在是数字.信息时代,rainbow发明的信号用N个自然数表示.为了避免两个人的对话被大坏 ...
- Rainbow: Combining Improvements in Deep Reinforcement Learning
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1710.02298v1 [cs.AI] 6 Oct 2017 (AAAI 2018) Abstract 深度强化学习社区对D ...
随机推荐
- display flex在部分低级android中的支付宝窗口表现
display flex用在移动端布局 当该元素是inline元素如span的时候回出现无宽高的情况,需要增加display:block: 他的子元素如果是inline元素那么也同样会出现这个问题,需 ...
- [转]POI : How to Create and Use User Defined Functions
本文转自:http://poi.apache.org/spreadsheet/user-defined-functions.html How to Create and Use User Define ...
- Android中的ListView属性使用总结
Android中使用ListView控件比较常见,如果能知道常用的一些属性使用,肯定会少很多坑. 1.ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景 ...
- log4sql介绍
log4sql介绍log4j环境中简单配置的情况下可收集执行的SQL语句和JDBC执行情况,如预编译的”?“显示成参数的实际值 下载log4sql.jar第一步:http://log4sql.sour ...
- Words Prefixed Trans-
transit v. Pass across or through (an area) The new large ships will be too big to transit the Panam ...
- java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'
java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName' ...
- select a.no,a.name,b.subid,b.subname,c.score
select a.no,a.name,b.subid,b.subname,c.score from a,b,c where a.no = c.no and b.subid = c.subid ;
- 一个制作Xcode5插件的模板
原Github地址:https://github.com/kattrali/Xcode5-Plugin-Template 安装将 本工成复制到~/Library/Developer/Xcode/Tem ...
- Linux之Nginx服务 nfs文件存储 负载均衡
一.搭建Nginx服务 Nginx 是俄罗斯人编写的十分轻量级的HTTP 服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个I ...
- java HttpServletRequest 重复流读取
在用reset接口的时候,常常会使用request.getInputStream()方法,但是流只能读取一次,一旦想要加上一个过滤器用来检测用户请求的数据时就会出现异常. 在过滤器中通过流读取出用 ...